Google 使用 msal loginPopup 访问令牌?

Google Access Token With msal loginPopup?

我正在尝试将 Azure Active Directory B2C 用于我的带有 Node JS API 的 SPA 的身份验证流程。我使用的是官方教程 (https://github.com/Azure-Samples/active-directory-b2c-javascript-msal-singlepageapp and https://github.com/Azure-Samples/active-directory-b2c-javascript-nodejs-webapi) 中提供的代码示例。据我所知,我已经正确设置了所有内容,并且我已经根据提供的文档创建了 Facebook 和 Google IDP 注册。我已经使用默认的 SignUpSignIn 用户流程设置了 b2cPolicies,所以除了指定我正在使用电子邮件、Google 和 Facebook 之外,实际上没有什么可以配置的。我可以毫无问题地使用 Google 和 Facebook 验证到 Azure 的示例 SPA,id_tokens 没问题。当我单击按钮从示例 API 访问 /hello 端点时,只有电子邮件和 Facebook 流从 myMSALObj.aquireTokenSilent 调用中生成正确的 access_token,但是,当使用 Google,第二次出现“选择帐户”弹出窗口。当我只登录一个帐户时,它会短暂出现并再次消失,但当登录多个帐户时,我必须再次 select 一次。这是一种糟糕的用户体验,有什么解决办法吗?

acquireTokenSilent() 调用中,在 MSAL 配置对象中传入一个参数:login_hint=emailaddress。然后使用 Custom Policy 将此值传递回 Google IdP,这样 Google 就会跳过其帐户选择页面。

您可以通过向 Google technical profile 添加一个输入声明来做到这一点:

      <InputClaims>
        <InputClaim ClaimTypeReferenceId="login_hint" DefaultValue="{OIDC:LoginHint}" />
      </InputClaims>

以上将使用 OIDC claims resolverlogin_hint 查询参数中提取值,并将该值作为名为 login_hint 的查询参数发送到 Google.

https://developers.google.com/identity/protocols/oauth2/openid-connect