如何向 AAD 进行身份验证并使用 PowerShell 将图形 API 作为守护程序应用程序调用?
How can I authenticate to AAD and call the Graph API as a Daemon Application with PowerShell?
我正在尝试在 Azure Active Directory 上进行一些非常快速的测试,并且我想使用守护程序应用程序来访问图形 API 而无需用户在场进行身份验证。我想验证我的应用程序注册是否可以成功验证到 AAD,我的客户端密码是否有效,并调用 AAD 图 API。
我已经在我的目录中注册了一个 "Web App/API",并且我已经将其设置为具有适当的权限以在仅应用程序上下文中调用 AAD 图 API。我还为我的应用程序生成了一个应用程序 key/certificate,以便我可以作为机密客户端进行身份验证。
我想看看我的 AAD 令牌,以及调用后图形 API 的输出。如何使用 PowerShell 快速完成此操作?
这个问题和 where create a PowerShell script to authenticate as a Native Client Application. However, in this situation, there are some subtle and important differences because you want to authenticate as a confidential client. Specifically, we need to create a Client Credential
so that we can authenticate without a user as a Daemon Application非常相似。
首先您需要下载并保存 ADAL 的 .NET dll。下载 link 可以在 Nuget 上找到。
注:我们这里专门使用ADAL v2
You can extract the contents of the .nupkg with a File Extractor like
7z, WinZip, etc...
从\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、Tenant ID 和您的 App Secret 信息。如果您使用证书进行身份验证,只需将使用 App Key 的代码注释掉,并取消注释使用证书的代码即可。我还预先配置了 AAD Graph API 对我租户中 return 用户的调用,但您可以将此 REST 调用更改为任何您想要的。
成功 运行 脚本后,您应该在工作目录中获得 2 个新文件: 一个包含编码 JSON 访问令牌的文本文件,可以在诸如this,以及一个 JSON 文件,其中包含 AAD 图 API 的响应。
如果有帮助请告诉我!
我正在尝试在 Azure Active Directory 上进行一些非常快速的测试,并且我想使用守护程序应用程序来访问图形 API 而无需用户在场进行身份验证。我想验证我的应用程序注册是否可以成功验证到 AAD,我的客户端密码是否有效,并调用 AAD 图 API。
我已经在我的目录中注册了一个 "Web App/API",并且我已经将其设置为具有适当的权限以在仅应用程序上下文中调用 AAD 图 API。我还为我的应用程序生成了一个应用程序 key/certificate,以便我可以作为机密客户端进行身份验证。
我想看看我的 AAD 令牌,以及调用后图形 API 的输出。如何使用 PowerShell 快速完成此操作?
这个问题和Client Credential
so that we can authenticate without a user as a Daemon Application非常相似。
首先您需要下载并保存 ADAL 的 .NET dll。下载 link 可以在 Nuget 上找到。
注:我们这里专门使用ADAL v2
You can extract the contents of the .nupkg with a File Extractor like 7z, WinZip, etc...
从\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、Tenant ID 和您的 App Secret 信息。如果您使用证书进行身份验证,只需将使用 App Key 的代码注释掉,并取消注释使用证书的代码即可。我还预先配置了 AAD Graph API 对我租户中 return 用户的调用,但您可以将此 REST 调用更改为任何您想要的。
成功 运行 脚本后,您应该在工作目录中获得 2 个新文件: 一个包含编码 JSON 访问令牌的文本文件,可以在诸如this,以及一个 JSON 文件,其中包含 AAD 图 API 的响应。
如果有帮助请告诉我!