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



下面是 Azure AD B2C 的配置,创建两个应用程序:Web 和 API。 添加了两个范围读取和写入 API 范围。 将 Web 应用程序配置为 Web 应用程序。 使用内置用户流(例如注册登录(进行测试。 运行 Web 应用的流,获取访问令牌,范围位于令牌中。

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

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

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

应参阅在 Azure Active Directory B2C 中请求访问令牌。

将 Web API 应用程序添加到 Azure 活动目录 B2C 租户后,使用授权代码流获取访问令牌。

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..."
}

点击此处查看详细信息。

相关内容

最新更新