如何解决使用Azure B2C并使用Apple / MSAL.JS /隐式流登录-获取令牌静默失败并出现X-Frame Deny错误
我目前正在使用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关于隐式流及其端点的文档有限。
我的两个问题是:
-
我想知道隐藏的iFrame技术是否无法通过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的续订。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。