问题描述
我目前正在使用React应用,该应用使用MSAL.js来向我在Azure B2C中注册的Apple身份提供商进行身份验证。我的实现基于指南:Post-GA Revisit of “Sign In with Apple” for Azure AD B2C
一切正常,但访问令牌请求例外,我尝试在登录后以静默方式获取。我目前在iFrame msal.js使用的XFrame拒绝错误中回退到一个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关于隐式流及其端点的文档有限。
我的两个问题是:
-
我知道与其他身份提供者(例如Google)面对这个确切的X-Frame拒绝问题时,您可以将login_hint传递到AcquisitionTokenSilent请求中,从而可以跳过交互(例如,如果用户有多个帐户并获得到iFrame中的帐户选择屏幕)。尽管我没有成功地将各种要求作为login_hint传递给Apple Provider(并且似乎不存在任何文档)。
解决方法
这是msal.js中的一个已知问题,原因是浏览器扩展cookie阻止程序/浏览器中禁用了第三方cookie。
要解决此问题,MSAL.js v2在大多数情况下通过使用auth代码流而不是隐式流来缓解此问题。请参阅this文档
,续订请求
您应该在续订请求中发送 prompt = none ,以防止登录页面尝试呈现在iframe上,就像我的Token Renewal博客文章一样。
苹果Cookie限制
您可能还遇到了Safari跨站点Cookie限制,如我的Token Renewal Problems帖子顶部所述。如果是这样,请查看更改浏览器默认设置是否会影响行为。
可能的解决方案
使用某种形式的刷新令牌(在浏览器中或包装在cookie中)可能是可行的方法,而不是基于iframe的续订。