首页 文章

如何通过PowerShell对AAD进行身份验证并将Graph API作为守护程序应用程序调用?

提问于
浏览
-1

我正在尝试对Azure Active Directory进行一些非常快速的测试,我想使用守护程序应用程序来访问Graph API,而无需用户进行身份验证 . 我想验证我的应用程序注册是否可以成功验证AAD,我的客户端密码是否有效,并调用AAD Graph API .

我已在我的目录中注册了“Web App / API”,并且我已将其设置为具有在App Only Context中调用AAD Graph API的适当权限 . 我还为我的应用程序生成了应用程序密钥/证书,以便我可以作为机密客户端进行身份验证 .

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

1 回答

  • 1

    此问题与this one非常相似,其中创建PowerShell脚本以作为Native Client应用程序进行身份验证 . 但是,在这种情况下,存在一些微妙且重要的差异,因为您希望作为机密客户端进行身份验证 . 具体来说,我们需要创建一个 Client Credential ,以便我们可以在没有用户的情况下进行身份验证Daemon Application .

    首先,您需要为ADAL下载并保存.NET dll . 下载链接可以在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"
    $login = "https://login.microsoftonline.com"
    
    # Create Client Credential Using App Key
    $secret = "<AppKey>"
    
    
    # Create Client Credential Using Certificate
    #$certFile = "<PFXFilePath>"
    #$certFilePassword = "<CertPassword>"
    #$secret = New-Object -TypeName System.Security.Cryptography.X509Certificates.X509Certificate -ArgumentList $certFile,$certFilePassword
    
    
    # Get an Access Token with ADAL
    $clientCredential = New-Object Microsoft.IdentityModel.Clients.ActiveDirectory.ClientCredential($clientId,$secret)
    $authContext = New-Object Microsoft.IdentityModel.Clients.ActiveDirectory.AuthenticationContext("{0}/{1}" -f $login,$tenantId)
    $authenticationResult = $authContext.AcquireToken($resourceId, $clientcredential)
    ($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和App Secret信息 . 如果使用证书进行身份验证,只需注释掉使用App Key的代码,并取消注释使用证书的代码 . 我还预先配置了AAD Graph API调用以返回我租户中的用户,但您可以将此REST调用更改为您想要的任何内容 .

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

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

相关问题