我正在尝试在SelfAsserted-EmailCollect技术资料中使用直接登录。我已将InputClaim的默认值设置为{OIDC:LoginHint},并传递了login_hint查询参数,但是在登录UI中,我看到的是{OIDC:LoginHint},而不是我在查询参数中传递的电子邮件地址。
这是我的索赔提供者:
<ClaimsProvider>
<DisplayName>SelfAsserted</DisplayName>
<TechnicalProfiles>
<TechnicalProfile Id="SelfAsserted-EmailCollect">
<DisplayName>Email</DisplayName>
<Protocol Name="Proprietary" Handler="Web.TPEngine.Providers.SelfAssertedAttributeProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
<Metadata>
<Item Key="ContentDefinitionReferenceId">api.selfasserted.profileupdate</Item>
</Metadata>
<IncludeInSso>false</IncludeInSso>
<InputClaims>
<InputClaim ClaimTypeReferenceId="email" DefaultValue="{OIDC:LoginHint}"/>
</InputClaims>
<OutputClaims>
<OutputClaim ClaimTypeReferenceId="email" />
</OutputClaims>
</TechnicalProfile>
</TechnicalProfiles>
</ClaimsProvider>
</ClaimsProviders>
我正在使用此URL登录:
https://mytenant.b2clogin.com/cubiksconnectv2.onmicrosoft.com/oauth2/v2.0/authorize?p=B2C_1A_Signup_Signin_Dev&client_id=myclientId&nonce=defaultNonce&redirect_uri=https%3A%2F%2Flocalhost%3A44381%2Fsignin-oidc&scope=openid&response_type=id_token&prompt=login&login_hint=test@address.com
Login UI的样子。
答案 0 :(得分:1)
一种可能的解决方案是将JavaScript添加到登录页面,以填充login_hint
查询参数中的电子邮件字段。
var _findSearchParameter = function (name) {
var matches = new RegExp('[\?&]' + name + '=([^&#]*)')
.exec(window.location.search);
return (matches !== null) ? matches[1] || 0 : false;
};
var loginHintValue = _findSearchParameter('login_hint');
if (loginHintValue) {
$('#email').val(loginHintValue);
}
答案 1 :(得分:0)
根据文档启用 Javascript 后,上述解决方案对我来说效果很好。
我在页面底部添加了以下脚本:
<script data-preload="false">
$(function () {
var loginHint = new URLSearchParams(window.location.search).get("login_hint");
$("#email").val(loginHint);
});
</script>
谢谢!