如果声明存储在自己的服务器上某个位置(在B2C中不可用),那么在Azure AD B2C中将自定义声明(用户订阅或角色列表作为示例)包含在令牌中的方法有哪些?目标是在令牌中提出索赔,以避免在每次请求时额外往返存储 .
对该主题的调查使我有以下方式:
-
通过Graph API添加自定义属性,配置为包含在JWT中 . 属性值应与我们的数据存储保持同步 .
-
自定义登录策略,如本文https://docs.microsoft.com/en-us/azure/active-directory-b2c/active-directory-b2c-rest-api-step-custom,但如果我做对了,额外的第6步是用户以不受限制的方式访问公开API(请求不受保密,可能用于通过提交的UserId获取用户声明) )?
-
IdentityServer4联合网关http://docs.identityserver.io/en/release/topics/federation_gateway.html,允许在发布之前添加任何声明 .
1 回答
您概述的前两种机制是在Azure AD B2C颁发的令牌中包含自定义声明的最常见和推荐的方法:
添加custom attribute和include it in the JWT . 您可以启用自定义属性via the B2C UI或via the Graph API . 您需要构建自己的机制,以使B2C中此属性的值与外部源via the Graph API保持同步 .
您可以使用custom policy至add a step in your authentication flow to call a Rest API to obtain the claim and include it in the token . 这个对Rest API的调用将由Azure AD B2C服务执行,而不是用户's browser, so it' ll是服务到服务调用(与客户端到服务调用),保留您用于身份验证的任何秘密API安全(例如Azure功能代码) .