使用自定义策略从查询参数预填充 Azure b2C 上的值

Prepopulate values on Azure b2C from the query parameters using Custom Policies

我已按照 中提供的说明进行操作。

无法获取查询参数并将其保存在 Azure B2C 上

GivenName 显示为 NULL。

我的技术资料是这样的:

<TechnicalProfile Id="LocalAccountSignUpWithLogonName">
    <DisplayName>Sign Up with Username</DisplayName>
  <Protocol Name="Proprietary" Handler="Web.TPEngine.Providers.SelfAssertedAttributeProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
  <Metadata>
    <Item Key="IpAddressClaimReferenceId">IpAddress</Item>
    <Item Key="ContentDefinitionReferenceId">api.localaccountsignup</Item>
    <Item Key="LocalAccountType">Username</Item>
    <Item Key="LocalAccountProfile">true</Item>
    <Item Key="language.button_continue">Create</Item>
    <Item Key="IncludeClaimResolvingInClaimsHandling">true</Item> 
  </Metadata>
  <CryptographicKeys>
    <Key Id="issuer_secret" StorageReferenceId="B2C_1A_TokenSigningKeyContainer" />
  </CryptographicKeys>
  <InputClaims>
    <InputClaim ClaimTypeReferenceId="signInName" />
    <InputClaim ClaimTypeReferenceId="extension_mfaByPhoneOrEmail" DefaultValue="SKIPMFA" />
    <InputClaim ClaimTypeReferenceId="givenName"  DefaultValue="{OAUTH-KV:name}"  AlwaysUseDefaultValue="true"/>
  </InputClaims>

我的url:https://test.b2clogin.com/test.onmicrosoft.com/B2C_1A_SUSI_MFA_phone_or_email_New/api/CombinedSigninAndSignup/unified?local=signup&csrf_token=Vzlka1JLZVBnZ05nQytEeElZZktqWW9OUmFXbHk1SHBWMGErWVRYQ3VLTVBjaWc3OVNLYlczOEZnQXpMVmdhN2t2aVd0SWlSek5PM3dRdTY0SE9XMXc9PTsyMDIyLTAzLTIzVDIwOjM0OjEyLjgyMzAwMTFaOzZHUzk3T0pGMWJLSWxySkJOSWVVUGc9PTt7Ik9yY2hlc3RyYXRpb25TdGVwIjoxfQ==&tx=StateProperties=eyJUSUQiOiI1NjgzMzRmNC1iMWVkLTRlNDQtODE0Mi1mOGNjOTQ5YjgyZjEifQ&p=B2C_1A_SUSI_MFA_phone_or_email_New&name=TestAccount

谢谢

您需要在发起 B2C 会话时将查询字符串参数添加到对 /authorize 端点的初始请求中。而不是你发布的 URL (看起来你在 B2C 会话开始后将查询字符串参数添加到调用中),如果你这样调用:

https://test.b2clogin.com/test.onmicrosoft.com/B2C_1A_SUSI_MFA_phone_or_email_New/oauth2/v2.0/authorize?client_id=XXX&nonce=ABC123&redirect_uri=https://jwt.ms&...&name=TestAccount

应该提取 name 查询字符串参数,您可以在技术资料中引用它。

在我的一个测试租户中,我使用这个 URL,它在末尾有一个 favFood 查询字符串参数:

https://<tenant>.b2clogin.com/<tenant>.onmicrosoft.com/oauth2/v2.0/authorize?p=<policy_name>&client_id=<client_id>da&nonce=defaultNonce&redirect_uri=https%3A%2F%2Fjwt.ms&scope=openid&response_type=id_token&prompt=login&qsFavFood=ice%20cream

并且通过像您在技术资料中一样使用声明解决程序(我使用的是 ClaimsTransformationProtocolProvider),我在 jwt.ms 中的回复将捕获的值显示为声明:

{ 
 <jwt_header_stuff>
}.{
  ...
  "nonce": "defaultNonce",
  "iat": 1648236227,
  "auth_time": 1648236227,
  "reduri": "https://jwt.ms/",
  "qsFavFood": "ice cream",
  ...
}.[Signature]