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