如何通过PowerShell对AAD进行身份验证并将Graph API称为Native Client应用程序?

时间:2017-03-02 09:14:18

标签: powershell azure-active-directory adal azure-ad-graph-api

我正在尝试对Azure Active Directory进行一些非常快速的测试,我需要一个工具来允许我快速向AAD进行身份验证,并调用AAD Graph API。

我已在我的目录中注册了Native Client应用程序,并且我已将其设置为具有调用AAD Graph API的相应权限。

我想看一下我的AAD令牌,以及调用后Graph API的输出。我如何使用PowerShell快速完成此任务?

1 个答案:

答案 0 :(得分:2)

  

>> See here for instructions on how to create a similar script for emulating a Daemon Client Application using the Client Credential Flow.

PowerShell允许您将.NET程序集直接加载到命令行中。这意味着您可以加载ADAL (Azure Active Directory Authentication Libraries)并使用它来真正简化身份验证体验。从ADAL获取令牌后,您只需使用Invoke-RestMethod cmdlet调用AAD Graph API。

首先,您需要为ADAL下载并保存.NET dll。可以找到下载链接on Nuget

注意:我们在这里专门使用ADAL v2。

  

您可以使用File Extractor(如7z,WinZip等)提取.nupkg的内容...

\lib\net45\中提取内容并将其复制到您的工作目录中。我把文件放在他们自己的" ADAL"文件夹,以保持分开。

然后,您应该能够使用以下内容创建新的PowerShell脚本:

# Load ADAL
Add-Type -Path ".\ADAL\Microsoft.IdentityModel.Clients.ActiveDirectory.dll"

# Output Token and Response from AAD Graph API
$accessToken = ".\Token.txt"
$output = ".\Output.json"

# Application and Tenant Configuration
$clientId = "<AppIDGUID>"
$tenantId = "<TenantID>"
$resourceId = "https://graph.windows.net"
$redirectUri = New-Object system.uri("<ReplyURL>")
$login = "https://login.microsoftonline.com"

# Get an Access Token with ADAL
$authContext = New-Object Microsoft.IdentityModel.Clients.ActiveDirectory.AuthenticationContext ("{0}/{1}" -f $login,$tenantId)
$authenticationResult = $authContext.AcquireToken($resourceId, $clientID, $redirectUri) 
($token = $authenticationResult.AccessToken) | Out-File $accessToken

# Call the AAD Graph API
$headers = @{ 
    "Authorization" = ("Bearer {0}" -f $token);
    "Content-Type" = "application/json";
}

Invoke-RestMethod -Method Get -Uri ("{0}/{1}/users?api-version=1.6" -f $resourceId, $tenantId) -Headers $headers -OutFile $output

注意:您需要在此脚本中更新App ID,租户ID和回复URL。我还预先配置了AAD Graph API调用以返回我租户中的用户,但您可以将此REST调用更改为您想要的任何内容。

成功运行脚本后,您应该在工作目录中获得2个新文件:一个文本文件,其中包含您编码的JSON访问令牌,可以在this等网站上进行base64解码,以及一个JSON文件使用AAD Graph API的响应。

请告诉我这是否有帮助!