PowerShell의 Invoke-RestMethod는 curl -u(기본인증)에 상당합니다.
에 상당하는 것은 무엇입니까?
curl -u username:password ...
에 탑재되어 .Invoke-RestMethod
이거 해봤어요.
$securePwd = ConvertTo-SecureString "password" -AsPlainText -Force
$credential = New-Object System.Management.Automation.PSCredential ($username, $securePwd)
Invoke-RestMethod -Credential $credential ...
401, Unauthorized가 반환됩니다.
지금까지 이 방법밖에 효과가 없었습니다.
$base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f $username,$password)))
Invoke-RestMethod -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)} ...
하지만 이보다 더 좋은 방법은 없다고 생각해요.
왜 그런지는 모르겠지만 -Credential
파라미터가 작동하지 않습니다. httpbin 서비스에서는 동작합니다.
다음과 같이 시험해 보십시오.
$pwd = ConvertTo-SecureString "MyPassword" -AsPlainText -Force
$cred = New-Object Management.Automation.PSCredential ('PsUser', $pwd)
Invoke-RestMethod 'http://httpbin.org/basic-auth/PsUser/MyPassword' -cred $cred
편집: 코멘트에서 설명한 바와 같이 이 메서드는 첫 번째 요청 시 Authorization 헤더를 전송하지 않습니다.챌린지 응답을 기다린 후 Authorization 헤더와 함께 요청을 재발송합니다.첫 번째 요청 시 credential이 필요한 서비스에서는 작동하지 않습니다.
#Requires -Version 6
$Uri = 'https://httpbin.org/basic-auth/user/pass'
# use "user" and "pass" when prompted for credentials
$Credential = Get-Credential
Invoke-RestMethod -Uri $Uri -Authentication Basic -Credential $Credential
실패했을 경우 메서드를 개별적으로 조합해야 할 것 같습니다.
자격 증명을 생성하여 요청에 추가합니다.
헤더를 생성하여 요청에 추가합니다.
$username = "username";
$password = ConvertTo-SecureString –String "password" –AsPlainText -Force
$credential = New-Object –TypeName "System.Management.Automation.PSCredential" –ArgumentList $username, $password
$base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f $username,$password)))
$getProjectUri = "yourUri"
Invoke-RestMethod -Method Get -Uri $getProjectUri -Headers @{Authorization = "Basic $base64AuthInfo" } -Credential $credential -ContentType "application/json"
은 " "와 함께 합니다.Get-Credential
의 »PSCredential
6.합니다.PowerShell 6.0을 사용합니다.은, 을 회피하는 으로, BSTR 콜의 사용을 회피하는 것으로, BSTR 은 「」, 「BSTR」, 「BSTR」로부터 하려고 할 .PSCredential
.
$creds = Get-Credential
$unsecureCreds = $creds.GetNetworkCredential()
$base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f $unsecureCreds.UserName,$unsecureCreds.Password)))
Remove-Variable unsecureCreds
Invoke-RestMethod -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)} ...
가 찾은 '아, 아, 아는데요.-WebSession
WebRequestSession credential은 WebRequestSession 。PS Credential 객체의 작성 방법은 이미 다른 답변에서 다루어져 있기 때문에 다시 설명하지 않습니다.
$WebSession = New-Object -TypeName Microsoft.PowerShell.Commands.WebRequestSession -Property @{Credentials=$Credential}
Invoke-RestMethod -Uri "your_URI" -WebSession $WebSession
이 방법에서는 첫 번째 콜에서 인증 헤더가 전송되므로 401 응답을 회피합니다.
덧붙여서, 이 어프로치는 프록시 상세 설정에도 사용할 수 있습니다(파라미터로 지정하면 모든 버전의 PS에서는 정상적으로 동작하지 않습니다).또한 API에서 필요한 경우 쿠키를 처리합니다.
으로는 사용자 를 '비밀번호'로 .Invoke-RestMethod
variable.credentials "로 지정합니다.
나에게 효과가 있었던 것은 다음과 같다.
$USERNAME = 'user'
$PASSWORD = 'password'
$IDP_URL = 'example.com/token'
$credPair = "$($USERNAME):$($PASSWORD)"
$encodedCredentials = [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes($credPair))
$parameters = @{
Uri = $IDP_URL
Headers = @{ 'Authorization' = "Basic $encodedCredentials" }
Method = 'POST'
Body = '...'
ContentType = '...'
}
Invoke-RestMethod @parameters
해 주십시오.$parameters
명령어가 부풀어 오르는 것을 방지합니다.
정말 오래된 질문인 건 알지만 업데이트 내용을 공유하고 싶었어요.PowerShell 기본 인증 기능를 거쳐 MS Docs를 가 있음을 되었습니다.-AllowUnencryptedAuthentication
parameter는 http를 사용하여 접속했기 때문입니다.파라미터에 액세스하기 위해 PS 버전도 업그레이드해야 했습니다.
매개 변수에 대한 설명에서 "암호화되지 않은 연결을 통해 인증 정보 및 암호를 전송할 수 있습니다.기본적으로는 credential 또는 인증 옵션을 https://로 시작하지 않는 URI와 함께 지정하면 오류가 발생하고 암호화되지 않은 연결을 통해 의도하지 않게 일반 텍스트로 비밀 정보가 통신되는 것을 방지하기 위해 요청이 중단됩니다.위험을 감수하고 이 동작을 재정의하려면 암호화되지 않은 AllowUncrypted를 제공하십시오.인증 파라미터"
나는 위의 예들 중 어떤 것도 운이 따르지 않은 채 며칠을 보냈다.최종적으로는, 투고 방법을 특정할 필요가 있었습니다.예를 들어 다음과 같습니다.
$request = Invoke-WebRequest -Method Post -Uri "https://www.emea-api.morningstar.com/token/oauth" -Headers @{accept='*/*';Authorization='Basic bWFy...encoded username:password...='};
(모바일리)
언급URL : https://stackoverflow.com/questions/24672760/powershells-invoke-restmethod-equivalent-of-curl-u-basic-authentication
'programing' 카테고리의 다른 글
PDF를 HTML에 삽입하는 권장 방법 (0) | 2023.04.08 |
---|---|
더 나은 Windows 콘솔 창은 없습니까? (0) | 2023.04.08 |
Windows에서 /usr/local/ssl/openssl.cnf에서 구성 정보를 로드할 수 없습니다. (0) | 2023.04.08 |
경로에서 파일 이름 추출 (0) | 2023.04.08 |
항상 nvarchar(MAX)를 사용할 경우 단점이 있습니까? (0) | 2023.04.08 |