2012-08-02 6 views
0

나는 powershell에서 다음 두 코드를 작성하여 ASANA에 액세스합니다.APIKEY를 사용하여 windows powershell을 통해 ASANA에 액세스

하지만 둘 다 작동하지 않습니다. 나는 항상이 오류가 발생한다.

"원격 서버가 오류를 반환했다 : (401) 권한이 없다."

도움을 주시면 감사하겠습니다. APIKey 만있는 보안 서버에 연결할 수있는 작동하는 C# 코드가있는 경우 게시하십시오. PowerShell 코드로 변환 할 수 있습니다.

코드 1

Function Get-WebResponseString 
{ 
    param (
     [Parameter(Mandatory=$true)] 
     [String]$Url,  
     [Parameter(Mandatory=$true)] 
     [String]$Method, 
     [Parameter(Mandatory=$false)] 
     [System.Net.NetworkCredential]$Credential 
    ) 

    $Request = [System.Net.WebRequest]::Create($Url)  
    $Request.Method = $Method 
    $Request.ContentType = "application/x-www-form-urlencoded"; 
    if ($Credential -ne $null) 
    { 
     $Request.Credentials = $credential 
     write-host "****" -foregroundcolor blue 
    } 

    $Response = $Request.GetResponse() 

    $StreamReader = New-Object System.IO.StreamReader $Response.GetResponseStream() 
    $StreamReader.ReadToEnd() 
} 

$Url = "https://app.asana.com/api/1.0/tasks" 
$Username = "[email protected]" 
$apikey="xxxxxxxxx" 

$credential = New-Object System.Net.NetworkCredential @($Username, $apikey) 

Get-WebResponseString -Url $Url -Credential $credential -Method "GET" 

코드 2

$sha = New-Object System.Security.Cryptography.SHA1CryptoServiceProvider 

$apikey="xxxxxxx" 
#Add colon 
$authinfo=$apikey+":"; 
$string1 = $authinfo 
Write-Host $string1 -ForeGroundColor Green 

#Encoding format 
$enc = [system.Text.Encoding]::UTF8 

#get bytes 
$data1 = $enc.GetBytes($string1) 

#Encode 
$result1 = $sha.ComputeHash($data1) 

#convert to 64 bit 
$mykey=[System.Convert]::ToBase64String($result1) 

Write-Host $mykey -ForeGroundColor Green 

$url = "https://app.asana.com/api/1.0/tasks" 
$url="https://app.asana.com/api/1.0/users" 
$request = [System.Net.WebRequest]::Create($url) 
$authorization = "Authorization: Basic " + $myKey 
Write-Host $authorization -ForeGroundColor Green 

$request.Headers.Add($authorization) 
#$request.Headers.Add("Authorization: BASIC $mykey") 
$response = $request.GetResponse() 
Write-Host $Response -ForeGroundColor Green 

답변

1

(나는 아사에서 일)

401 헤더가 문제가 당신의 인증 헤더 어딘가에 놓여있는 단서이다.

HTTP 기본 인증 사양은 username : password의 SHA1 해시를 호출하지 않습니다. 그것은 바로 문자열의 base64 인코딩입니다. 해시 된 데이터 대신 ToBase64String 번으로 전화하여 $authinfo을 전달합니다.

+0

굉장합니다. 감사. – MAK

+0

굉장합니다. 감사. 챔피언처럼 일했습니다. 내 업데이트 코드는 다음과 같습니다 $ apikey = "*******************" $ authinfo = $ apikey + ":"; $ enc = [system.Text.Encoding] :: UTF8 $ data1 = $ enc.GetBytes ($ authinfo) $ mykey = [System.Convert] :: ToBase64String ($ data1) $ url = "https : /app.asana.com/api/1.0/users " $ request = [System.Net.WebRequest] :: Create ($ url) $ authorization ="Authorization : Basic "+ $ myKey $ request.Headers.Add ($ authorization) $ Response.GetResponse() $ StreamReader = New-Object System.IO.StreamReader $ Response.GetResponseStream() $ StreamReader.ReadToEnd – MAK

관련 문제