在找到使用客户端 ID 和密钥生成承载或访问令牌的解决方案之前,我研究了各种 Microsoft 文档。虽然他们提供了宝贵的见解,但并不完全符合我的具体要求。在使用 Azure B2C 自定义策略中的此配置成功实现预期结果之前,我深入研究了多种资源并尝试了不同的方法。
简介
在这篇文章中,我将分享如何配置 Azure AD B2C 自定义策略以使用令牌端点动态生成承载或访问令牌。这对于需要使用第三方系统或 API 进行身份验证并检索动态访问令牌的场景特别有用。
为什么这很有用
通过自动化令牌检索来简化 API 身份验证。 可以轻松与需要 OAuth 2.0 身份验证的系统集成。 增强了 Azure AD B2C 自定义策略针对高级场景的功能。
关键概念
声明和技术配置文件:定义声明以保存所需值(例如 client_id、client_secret)并使用技术配置文件调用令牌 URL。 服务 URL:指向 OAuth 令牌端点,通常采用以下格式:https://login.microsoftonline.com/``/oauth2/token。 声明转换:确保收到的访问令牌(bearerToken)可以在后续步骤中使用。 分步指南
定义索赔类型 1)定义代币生成所需的声明。将其放置在您的自定义策略 XML 部分下:
<ClaimType Id="grant_type">
<DisplayName>grant_type </DisplayName>
<DataType>string</DataType>
<DefaultPartnerClaimTypes>
<Protocol Name="OAuth2" PartnerClaimType="grant_type" />
</DefaultPartnerClaimTypes>
</ClaimType>
<ClaimType Id="client_id">
<DisplayName>Client ID</DisplayName>
<DataType>string</DataType>
<DefaultPartnerClaimTypes>
<Protocol Name="OAuth2" PartnerClaimType="client_id" />
</DefaultPartnerClaimTypes>
</ClaimType>
<ClaimType Id="client_secret">
<DisplayName>Client secret</DisplayName>
<DataType>string</DataType>
<DefaultPartnerClaimTypes>
<Protocol Name="OAuth2" PartnerClaimType="client_secret" />
</DefaultPartnerClaimTypes>
</ClaimType>
<ClaimType Id="resource">
<DisplayName>resource</DisplayName>
<DataType>string</DataType>
<DefaultPartnerClaimTypes>
<Protocol Name="OAuth2" PartnerClaimType="resource" />
</DefaultPartnerClaimTypes>
</ClaimType>
注意:您可以尝试在此处或技术配置文件中提供值,这取决于您。
2) 创建技术档案 此配置文件从令牌 URL 检索访问令牌并将其存储在 bearerToken 声明中。将其放在以下部分下:
<TechnicalProfile Id="OAuth2BearerToken">
<DisplayName>Get OAuth Bearer Token</DisplayName>
<Protocol Name="Proprietary" Handler="Web.TPEngine.Providers.RestfulProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
<Metadata>
<Item Key="ServiceUrl">https://login.microsoftonline.com/<YourTeanantId>/oauth2/token</Item>
<Item Key="HttpMethod">POST</Item>
<Item Key="AuthenticationType">None</Item>
<Item Key="HttpBinding">POST</Item>
<Item Key="SendClaimsIn">Form</Item>
<Item Key="Content-Type">application/x-www-form-urlencoded</Item>
</Metadata>
<InputClaims>
<InputClaim ClaimTypeReferenceId="client_id" PartnerClaimType="client_id" DefaultValue="Your_Client_Id" AlwaysUseDefaultValue="true" />
<InputClaim ClaimTypeReferenceId="client_secret" PartnerClaimType="client_secret" DefaultValue="Your_Client_Secret" AlwaysUseDefaultValue="true" />
<InputClaim ClaimTypeReferenceId="resource" PartnerClaimType="resource" DefaultValue="resource id (Optional)" AlwaysUseDefaultValue="true" />
<InputClaim ClaimTypeReferenceId="grant_type" PartnerClaimType="grant_type" DefaultValue="client_credentials" AlwaysUseDefaultValue="true" />
</InputClaims>
<OutputClaims>
<OutputClaim ClaimTypeReferenceId="bearerToken" PartnerClaimType="access_token" DefaultValue="default token" />
</OutputClaims>
<UseTechnicalProfileForSessionManagement ReferenceId="SM-Noop" />
</TechnicalProfile>
<OrchestrationStep Order="1" Type="ClaimsExchange">
<Preconditions>
<Precondition Type="ClaimEquals" ExecuteActionsIf="true">
<Value>bearerToken</Value>
<Value>NOT_EMPTY</Value>
<Action>SkipThisOrchestrationStep</Action>
</Precondition>
</Preconditions>
<ClaimsExchanges>
<ClaimsExchange Id="GetBearerToken" TechnicalProfileReferenceId="OAuth2BearerToken" />
</ClaimsExchanges>
</OrchestrationStep>
提示和最佳实践
始终使用安全方法来管理 client_id 和 client_secret。 验证令牌端点并确保其符合 OAuth 2.0 标准。 出于调试目的记录开发中的输出,但避免暴露敏感数据。
结论
通过执行以下步骤,您可以在 Azure AD B2C 自定义策略中动态生成不记名令牌,从而简化与外部系统的安全集成。