首页 文章

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

提问于
浏览
3

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

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

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

1 回答

  • 2

    有关如何使用客户端凭据流创建用于模拟守护程序客户端应用程序的类似脚本的说明,请参见此处 .

    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解码,以及带有AAD Graph响应的JSON文件API .

    如果这有帮助,请告诉我!

相关问题