2

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

4

2 回答 2

3

您可以使用 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 应用程序和/或 Web API”,因为 Native AD 应用程序没有客户端密码。

于 2016-06-12T02:08:11.133 回答
-5

我使用杰克的答案让这个工作,但有一些变化。这是完整的工作示例:

$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
于 2016-06-13T17:27:07.593 回答