如何在 Azure AD B2C 自定义策略中生成承载或访问令牌

问题描述 投票:0回答:1

在找到使用客户端 ID 和密钥生成承载或访问令牌的解决方案之前,我研究了各种 Microsoft 文档。虽然他们提供了宝贵的见解,但并不完全符合我的具体要求。在使用 Azure B2C 自定义策略中的此配置成功实现预期结果之前,我深入研究了多种资源并尝试了不同的方法。

azure azure-ad-b2c azure-ad-b2c-custom-policy
1个回答
0
投票

简介

在这篇文章中,我将分享如何配置 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>
3)与编排步骤集成 在您的编排过程中使用 OAuth2BearerToken 技术配置文件。例如:

<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 自定义策略中动态生成不记名令牌,从而简化与外部系统的安全集成。

我在邮递员集合中尝试过同样的方法 enter image description here 希望这有帮助:) 谢谢, 瓦姆西·克里希纳·查甘提

© www.soinside.com 2019 - 2024. All rights reserved.