2016-12-12 19 views
0

APIにリクエストする認証ベアラを追加する必要があります。私はこれをC#でやったことがあるが、powershellでそれを行う必要がある。私はこのようなコマンドレットに私のC#メソッドを回してみました:powershellコマンドレット経由で認証トークンベアラを取得するにはどうすればよいですか?

[Cmdlet(VerbsCommunications.Get, "Token")] 
public class GetAuthTokenCommand : Cmdlet 
{ 
    // Overide the ProcessRecord method 
    protected override void ProcessRecord() 
    { 
     AuthenticationContext authContext = new AuthenticationContext("https://login.microsoftonline.com/blablaguid/oauth2/token"); 
     Task<AuthenticationResult> resultTask = authContext.AcquireTokenAsync(
      "MyResourceUri", 
      "MyClientId", 
      new Uri("https://login.live.com/oauth20_desktop.srf"), 
      new Microsoft.IdentityModel.Clients.ActiveDirectory.PlatformParameters(PromptBehavior.Auto, false)); 

     resultTask.Wait(); 

     WriteObject("Token: "+ resultTask.Result.AccessToken); 
    } 
} 

しかし、これは私にエラー与える:

+ CategoryInfo   : NotSpecified: (:) [Send-Greeting], AggregateException 
+ FullyQualifiedErrorId : System.AggregateException,GetAuthtoken.SendGreetingCommand 

任意のアイデア?

+0

グラフapiを見てください:https://blogs.msdn.microsoft.com/aadgraphteam/2014/12/11/announcing-azure-ad-graph-api-client-library-2-0/ – urlreader

+0

ドンこれが私の状況で可能になるとは思わない。どのように私は仕事に投稿したコードを得ることができますか? – SKLAK

答えて

0
function GetAuthToken 
{ 
    param 
    (
      [Parameter(Mandatory=$true)] 
      $ApiEndpointUri, 

      [Parameter(Mandatory=$true)] 
      $AADTenant 
    ) 
    $adal = "${env:ProgramFiles(x86)}\Microsoft SDKs\Azure\PowerShell\ServiceManagement\Azure\Services\" + ` 
       "Microsoft.IdentityModel.Clients.ActiveDirectory.dll" 
    $adalforms = "${env:ProgramFiles(x86)}\Microsoft SDKs\Azure\PowerShell\ServiceManagement\Azure\Services\" + ` 
        "Microsoft.IdentityModel.Clients.ActiveDirectory.WindowsForms.dll" 

    [System.Reflection.Assembly]::LoadFrom($adal) | Out-Null 
    [System.Reflection.Assembly]::LoadFrom($adalforms) | Out-Null 

    $clientId = "1950a258-227b-4e31-a9cf-717495945fc2" 
    $redirectUri = "urn:ietf:wg:oauth:2.0:oob" 
    $authorityUri = “https://login.windows.net/$aadTenant” 

    $authContext = New-Object "Microsoft.IdentityModel.Clients.ActiveDirectory.AuthenticationContext" -ArgumentList $authorityUri 

    $authResult = $authContext.AcquireToken($ApiEndpointUri, $clientId,$redirectUri, "Auto") 

    return $authResult 
} 

$ApiEndpointUri = "https://management.azure.com/" #change this to graph api uri 
$AADTenant = 'GUID' #AAD tenant guid 
$token = GetAuthToken -ApiEndPointUri $ApiEndpointUri -AADTenant $AADTenant 
$header = @{ 
    'Content-Type'='application\json' 
    'Authorization'=$token.CreateAuthorizationHeader() 
} 

$request = `` 
(Invoke-RestMethod -Uri $request -Headers $header -Method Get).value 

私はそれがAzureのREST \グラフAPIを問い合わせるために働く(ここで思い出すことができない)は、Web上のどこかからこのいつか前にかかってきました。

+0

acquiretokenメソッドはauthcontextクラスに存在しません。 – SKLAK

関連する問題