0

我目前正在使用一个 React 应用程序,它使用 MSAL.js 向我在 Azure B2C 中注册的 Apple 身份提供程序进行身份验证。我的实施基于一个指南:Post-GA Revisit of "Sign In with Apple" for Azure AD B2C

除了访问令牌请求外,一切都在工作,我在登录后尝试静默获取。我目前收到 iFrame msal.js 使用中发生的 X-Frame Deny 错误,它回退到一个 acquireTokenRedirect 哪个要求用户再次登录(不是很好的用户体验)然后它就可以工作了。

来自浏览器控制台的错误:

拒绝显示'https://appleid.apple.com/auth/authorize?client_id=com.my.clientid&redirect_uri=https://myb2ctenant.b2clogin.com%2foauth2%2fauthresp&response_type=code&scope=email&response_mode=form_post&nonce=nonce&state=StateProperties% 3drandomCharshere',因为它将'X-Frame-Options'设置为'deny'。

不幸的是,Apple 关于其端点的隐式流的文档是有限的。

我的两个问题是:

  1. 我想知道通过 Apple 登录是否可能无法使用隐藏的 iFrame 技术以静默方式获取令牌。有没有人成功实施这个?

  2. 我知道当遇到与其他身份提供商(例如 Google)的确切 X-Frame 拒绝问题时,您可以将 login_hint 传递给acquireTokenSilent 请求,该请求允许跳过交互(例如,如果用户有多个帐户并进入帐户选择屏幕iFrame)。不过,我没有成功地将各种声明作为 login_hint 传递给 Apple Provider(并且关于它的文档似乎不存在)。

4

2 回答 2

0

这是 msal.js 中的一个已知问题,因为浏览器中禁用了浏览器扩展 cookie 阻止程序/第三方 cookie。

为了解决此问题,MSAL.js v2 在大多数情况下通过使用身份验证代码流而不是隐式流来缓解此问题。请参考这个文件

于 2020-08-26T18:12:18.477 回答
0

续订请求

您应该在续订请求上发送prompt=none,以防止登录页面尝试在 iframe 上呈现,如我的Token Renewal博客文章中所示。

苹果饼干限制

您可能还遇到了 Safari 跨站点 cookie 限制,如我的令牌更新问题帖子顶部所述。如果是这样,请查看更改浏览器默认设置是否会影响行为。

可能的解决方案

以某种形式使用刷新令牌(在浏览器中或包装在 cookie 中)可能是可行的方法,而不是基于 iframe 的更新。

于 2020-08-26T18:14:02.617 回答