使用自定义策略从查询参数预填充 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>
谢谢
您需要在发起 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]
我已按照
无法获取查询参数并将其保存在 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>
谢谢
您需要在发起 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]