我在使用Azure AD B2C自定义策略从OpenID Connect提供程序获取声明时遇到了一些问题。
我的OIDC提供商未在id_token
中返回任何声明,它有一个名为userInfo_endpoint
的声明的单独端点,您可以使用Bearer身份验证发送GET请求并access_token
获取用户以json格式声明。我知道这是非常标准的OIDC功能。
我看到的大多数示例都使用ClaimsEndpoint来获取声明,在我看来,声明是作为signin_signup用户旅程的一部分添加到用户的。
到目前为止,一切都按预期工作,testClaim作为id_token的一部分从b2c返回,但没有设置其他声明。我为策略设置了Application Insights,但B2C从不调用端点/userinfo
,我在日志中看不到它的痕迹。是否支持OIDC /userinfo
端点?
以下是我的声明提供商部分。
<ClaimsProvider>
<DisplayName>Provider</DisplayName>
<TechnicalProfiles>
<TechnicalProfile Id="provider-oidc">
<DisplayName>Providerprofile</DisplayName>
<Protocol Name="OpenIdConnect" />
<OutputTokenFormat>JWT</OutputTokenFormat>
<Metadata>
<Item Key="client_id">preprod-provider</Item>
<Item Key="scope">openid profile</Item>
<Item Key="response_types">code</Item>
<Item Key="METADATA">https://preprod.provider.com/oidc/.well-known/openid-configuration</Item>
<Item Key="ProviderName">https://preprod.provider.com/oidc</Item>
<Item Key="state">123abc</Item>
<Item Key="HttpBinding">POST</Item>
<Item Key="UsePolicyInRedirectUri">true</Item>
<Item Key="authorization_endpoint">https://preprod.provider.com/oidc/authorize</Item>
<Item Key="token_endpoint">https://preprod.provider.com/oidc/token</Item>
<Item Key="ClaimsEndpoint">https://preprod.provider.com/oidc/userinfo</Item>
<Item Key="ClaimsEndpointAccessTokenName">oauth2_access_token</Item>
<Item Key="ClaimsResponseFormat">json</Item>
<!--Item Key="userinfo_endpoint">https://preprod.provider.com/oidc/userinfo</Item-->
</Metadata>
<CryptographicKeys>
<Key Id="client_secret" StorageReferenceId="B2C_1A_ProviderClientSecret" />
</CryptographicKeys>
<OutputClaims>
<OutputClaim ClaimTypeReferenceId="socialIdpUserId" PartnerClaimType="sub"/>
<OutputClaim ClaimTypeReferenceId="authenticationSource" DefaultValue="providerAuthentication" />
<OutputClaim ClaimTypeReferenceId="identityProvider" DefaultValue="provider" />
<OutputClaim ClaimTypeReferenceId="displayName" PartnerClaimType="name" />
<OutputClaim ClaimTypeReferenceId="givenName" PartnerClaimType="given_name" />
<OutputClaim ClaimTypeReferenceId="surName" PartnerClaimType="family_name" />
<OutputClaim ClaimTypeReferenceId="testClaim" DefaultValue="testValue" />
</OutputClaims>
<OutputClaimsTransformations>
<OutputClaimsTransformation ReferenceId="CreateRandomUPNUserName"/>
<OutputClaimsTransformation ReferenceId="CreateUserPrincipalName"/>
<OutputClaimsTransformation ReferenceId="CreateAlternativeSecurityId"/>
<OutputClaimsTransformation ReferenceId="CreateSubjectClaimFromAlternativeSecurityId"/>
</OutputClaimsTransformations>
</TechnicalProfile>
</TechnicalProfiles>
</ClaimsProvider>
答案 0 :(得分:0)
Azure AD B2C不支持userinfo_endpoint。您可以在Azure AD B2C feedback forum中请求此功能。
有两种解决方法:
userinfo_endpoint
以获取这些额外声明,并将其添加到令牌以用于其余应用程序答案 1 :(得分:0)
尽管OpenIdConnect
技术资料似乎不支持userinfo端点,但是您应该能够将OAuth2
技术资料与ClaimsEndpoint
一起使用,以从userinfo中获取声明端点
答案 2 :(得分:0)
ADB2C 现在支持 user_info 端点。请参阅 https://docs.microsoft.com/en-us/azure/active-directory-b2c/userinfo-endpoint?pivots=b2c-custom-policy 了解更多信息。