没有 ADAL 的 Azure AD 访问令牌

Azure AD Access Token Without ADAL

我正在尝试在需要访问令牌的服务器端编辑用户的 AD 配置文件。我可以使用仅使用客户端 ID 和密码的本机应用程序示例来执行此操作。 The docs 提到这仅适用于 http 请求(请参阅获取访问令牌),但我找不到任何示例或方法来执行此操作。

您可以使用 OAuth2 请求访问令牌。下面是有关如何将 OAuth2 与 Azure AD 结合使用的示例。它是用 PowerShell 脚本编写的。

$tenantID = "<the Tenant ID of your Azure AD>"
$loginEndpoint = "https://login.windows.net/"
$graphResourceURI = "https://graph.windows.net/"
$clientId = "<the client id of your AD application>"
$key = "<the client secret of your AD application>"

# the URL for requesting access token.
$tokenURL = $loginEndpoint+$tenantID+"/oauth2/token"

# the token request body.
$body = "grant_type=client_credentials&client_id="+$clientId `
         +"&client_secret="+[system.uri]::EscapeDataString($key) `
         +"&resource="+[system.uri]::EscapeDataString($graphResourceURI)

# the token request headers.
$headers = @{"Content-Type"="application/x-www-form-urlencoded"}

$authenticationResult = Invoke-RestMethod -Method POST `
                         -Uri $tokenURL -Headers $headers -Body $body

$authenticationResult.access_token

您在这里使用的AD应用程序必须是"Web application and/or web API",因为Native AD应用程序没有客户端密钥。

我使用 Jack 的回答使它起作用,但做了一些更改。这是完整的工作示例:

$tenantID = "<the name of your tenant of your Azure AD>"
$loginEndpoint = "https://login.windows.net/"
$graphResourceURI = "https://graph.windows.net/"

$clientId = "<the client id of your AD application>"
$key = "<the client secret of your AD application>"

# the URL for requesting access token.
$tokenURL = $loginEndpoint+$tenantID+"/oauth2/token"

# the token request body.
$body = "grant_type=client_credentials&client_id="+$clientId `
         +"&client_secret="+[system.uri]::EscapeDataString($key) `         
         +"&resource="+[system.uri]::EscapeDataString($graphResourceURI)

# the token request headers.
$headers = @{"Content-Type"="application/x-www-form-urlencoded"}

$authenticationResult = Invoke-RestMethod -Method POST `
                         -Uri $tokenURL -Headers $headers -Body $body

$authenticationResult.access_token