带有 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_id 和 IdTokenAudience。
微软文档指出:
但不幸的是,文档是错误的,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 。因此,如果有人试图实现这种情况,我将解释我的方法:
使用 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>
您的自定义 multi-IDP 微服务将通过 queryString 在 /authorize 端点捕获 clientId,并且应该从存储中检索 Apple client_id、teamId、redirect_uri (同Apple console),对应的KeyId和Issuer
您的 /authorize 应重定向到 Apple 身份验证页面,并提示您输入凭据。
输入凭据并单击“继续”按钮后,您的 /token 端点应该被触发,此时您需要从 Key Vault 中检索 .p8 机密(私钥)以生成与 /token 正文中的代码一起使用的令牌。
client_id、client_secret 和 keyId 应该被您自定义存储的数据覆盖。
- 制作令牌并构建数据以发送到 Apple /token 端点后,检索 Apple 最终令牌及其 access_token、id_token、refresh_token ..
- 此时你需要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
- Return 从您的微服务 /token 端点到 B2C 的数据:
就这些!编码愉快!
我有一个带有 OpenId Connect 技术配置文件的自定义策略,它从元数据项调用授权和令牌端点到我的自定义 API 中间件,它用于重定向到 Apple authentathion endpoint/website 所以我可以处理我的自定义策略中的 multiApple 解决方案试图忽略 client_id 和 IdTokenAudience。
微软文档指出:
但不幸的是,文档是错误的,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 。因此,如果有人试图实现这种情况,我将解释我的方法:
使用 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>
您的自定义 multi-IDP 微服务将通过 queryString 在 /authorize 端点捕获 clientId,并且应该从存储中检索 Apple client_id、teamId、redirect_uri (同Apple console),对应的KeyId和Issuer
您的 /authorize 应重定向到 Apple 身份验证页面,并提示您输入凭据。
输入凭据并单击“继续”按钮后,您的 /token 端点应该被触发,此时您需要从 Key Vault 中检索 .p8 机密(私钥)以生成与 /token 正文中的代码一起使用的令牌。 client_id、client_secret 和 keyId 应该被您自定义存储的数据覆盖。
- 制作令牌并构建数据以发送到 Apple /token 端点后,检索 Apple 最终令牌及其 access_token、id_token、refresh_token ..
- 此时你需要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
- Return 从您的微服务 /token 端点到 B2C 的数据:
就这些!编码愉快!