Azure AD B2C自定义策略,如何将应用程序范围放入访问令牌

时间:2020-02-10 00:57:02

标签: azure-ad-b2c

这是Azure AD B2C的配置,创建两个应用程序:Web和api。添加了两个作用域对api作用域的读写。将Web应用程序配置为Web应用程序。使用内置的用户流进行了测试,例如注册登录。运行Web应用程序的流程,获取访问令牌,作用域在令牌中。

现在创建一个自定义策略,以使用多租户通过Azure AD对用户进行身份验证。创建了自定义注册/登录策略。运行策略,通过在访问令牌中指定api范围来获取访问令牌,但是返回令牌不包含范围声明。我的问题是如何配置自定义策略以在访问令牌中包含api范围?

1 个答案:

答案 0 :(得分:0)

运行自定义策略时,它将仅返回ID令牌,而不返回访问令牌。

因此您的范围声明不会包含在ID令牌中。

您应该参考Request an access token in Azure Active Directory B2C

拥有Added a web API application to your Azure Active Directory B2C tenant后,使用授权码流程获取访问令牌。

GET https://<tenant-name>.b2clogin.com/tfp/<tenant-name>.onmicrosoft.com/<policy-name>/oauth2/v2.0/authorize?
client_id=<application-ID>
&nonce=anyRandomValue
&redirect_uri=https://jwt.ms
&scope=https://<tenant-name>.onmicrosoft.com/api/read
&response_type=code

带有授权码的响应应类似于以下示例:

https://jwt.ms/?code=eyJraWQiOiJjcGltY29yZV8wOTI1MjAxNSIsInZlciI6IjEuMC...

成功收到授权码后,您可以使用它来请求访问令牌:

POST <tenant-name>.onmicrosoft.com/oauth2/v2.0/token?p=<policy-name> HTTP/1.1
Host: <tenant-name>.b2clogin.com
Content-Type: application/x-www-form-urlencoded

grant_type=authorization_code
&client_id=<application-ID>
&scope=https://<tenant-name>.onmicrosoft.com/api/read
&code=eyJraWQiOiJjcGltY29yZV8wOTI1MjAxNSIsInZlciI6IjEuMC...
&redirect_uri=https://jwt.ms
&client_secret=2hMG2-_:y12n10vwH...

响应:

{
    "access_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImtpZCI6Ilg1ZVhrN...",
    "token_type": "Bearer",
    "not_before": 1549647431,
    "expires_in": 3600,
    "expires_on": 1549651031,
    "resource": "f2a76e08-93f2-4350-833c-965c02483b11",
    "profile_info": "eyJ2ZXIiOiIxLjAiLCJ0aWQiOiJjNjRhNGY3ZC0zMDkxLTRjNzMtYTcyMi1hM2YwNjk0Z..."
}

查看详细信息here

相关问题