带有 TP OpenId Connect 的 B2C 自定义策略 - IdTokenAudience - MultiApple 场景

B2C Custom Policy with TP OpenId Connect - IdTokenAudience - MultiApple scenario

我有一个带有 OpenId Connect 技术配置文件的自定义策略,它从元数据项调用授权和令牌端点到我的自定义 API 中间件,它用于重定向到 Apple authentathion endpoint/website 所以我可以处理我的自定义策略中的 multiApple 解决方案试图忽略 client_idIdTokenAudience。 微软文档指出:

但不幸的是,文档是错误的,TokenAudience 总是在成功获得 Apple 令牌和 return 通过 redirect_uri 流向 B2C 之后得到验证在 Apple 控制台中为我能够通过 API.

中的授权端点传递的 clientId 配置

一些 B2C 专家能否阐明在自定义策略中忽略 OpenId Connect TP 中的 IdTokenAudience?

微软参考文档:

https://docs.microsoft.com/en-us/azure/active-directory-b2c/openid-connect-technical-profile

提前致谢!

它被用作覆盖。

当此元数据项不存在时,我们确保受众与预期受众匹配,client_id。

指定后,我们会确保 aud 声明与您在元数据项中声明的相符。

这永远不允许关闭验证。

好的,我会回答我的问题。 正如@Jas 所述,由于安全验证,您无法摆脱 client_id 。因此,如果有人试图实现这种情况,我将解释我的方法:

  1. 使用 client_id="myaudience" 创建这样的技术配置文件,并使用 METADATA 项指向您的自定义 OIDC 微服务元数据。 B2C 应用程序 clientId (B2C URL clientId) 必须作为输入声明传递以处理不同的 Apple client_id,具体取决于注册的应用程序:

      <TechnicalProfile Id="AppleID">
       <Protocol Name="OpenIdConnect" />
       <Metadata>
         <Item Key="METADATA">https://xxxxxxxx.ngrok.io/metadata?provider=apple</Item>
         <Item Key="HttpBinding">POST</Item> 
         <Item Key="response_types">code</Item>
         <Item Key="UsePolicyInRedirectUri">false</Item>
         <Item Key="client_id">myaudience</Item>
       </Metadata>
       <CryptographicKeys>
         <Key Id="client_secret" StorageReferenceId="B2C_1A_MultiIDP" />
       </CryptographicKeys>
       <InputClaims>
         <InputClaim ClaimTypeReferenceId="groupId" />
         <InputClaim ClaimTypeReferenceId="appId" PartnerClaimType="clientId" DefaultValue="{OIDC:ClientId}" />
       </InputClaims>
       <OutputClaims>
         <OutputClaim ClaimTypeReferenceId="issuerUserId" PartnerClaimType="sub" />
         <OutputClaim ClaimTypeReferenceId="email" PartnerClaimType="email" />
         <OutputClaim ClaimTypeReferenceId="givenName" PartnerClaimType="preferred_username" />
         <OutputClaim ClaimTypeReferenceId="displayName" DefaultValue="Apple user" />
         <OutputClaim ClaimTypeReferenceId="picture" PartnerClaimType="picture" />
         <OutputClaim ClaimTypeReferenceId="identityProvider" DefaultValue="apple.com" AlwaysUseDefaultValue="true" />
       </OutputClaims>
     </TechnicalProfile>
    
  2. 您的自定义 multi-IDP 微服务将通过 queryString 在 /authorize 端点捕获 clientId,并且应该从存储中检索 Apple client_id、teamId、redirect_uri (同Apple console),对应的KeyId和Issuer

  3. 您的 /authorize 应重定向到 Apple 身份验证页面,并提示您输入凭据。

  4. 输入凭据并单击“继续”按钮后,您的 /token 端点应该被触发,此时您需要从 Key Vault 中检索 .p8 机密(私钥)以生成与 /token 正文中的代码一起使用的令牌。 client_id、client_secret 和 keyId 应该被您自定义存储的数据覆盖。

  1. 制作令牌并构建数据以发送到 Apple /token 端点后,检索 Apple 最终令牌及其 access_token、id_token、refresh_token ..

  1. 此时你需要return所有这些数据到B2C但是观众会失败,所以你需要重新制作一个新的id_token然后通过配置的[=将控制权传递给B2C 63=],您还可以将来自 Apple 的声明移动到新的伪造令牌。用于签署新令牌的密钥必须在您的 B2C 身份体验框架中配置为策略密钥(签名)。 有关详细信息,请参阅此文档:https://docs.microsoft.com/en-us/azure/active-directory-b2c/openid-connect-technical-profile 此秘密在上面的技术配置文件中被称为 cryptographickey,如下所示:B2C_1A_MultiIDP

  1. Return 从您的微服务 /token 端点到 B2C 的数据:

就这些!编码愉快!