AD B2C直接登录显示{OIDC:LoginHint}而不是电子邮件地址

时间:2019-08-22 15:51:54

标签: azure azure-ad-b2c

我正在尝试在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的样子。

2 个答案:

答案 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>

谢谢!