没有 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
我正在尝试在需要访问令牌的服务器端编辑用户的 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