首先,我要说的是,我对web开发和OpenIdConnect/OAuth非常陌生,我已经尝试了我所能想到的一切来追踪这个问题,但没有成功,所以现在我转向社区。。。
我使用IdentityServer4-Nuget Pkg 2.1.1设置身份提供程序
我使用IDP设置了一个MVC客户端web应用程序,使用混合流进行身份验证,除运行iOS 9.3.5的iPad外,其他所有设备和浏览器都可以正常工作
在这些设备上(在运行相同iOS版本的3个不同iPad上复制),身份验证过程开始;用户被要求登录到IDP,然后浏览器(Safari)位于授权端点处的空白屏幕上。
查看IDP的日志,我可以看到请求“正在”处理中,并且似乎生成了授权端点响应-没有明显的问题迹象。
我曾尝试使用IdentityServer4提供的示例设置测试客户端web应用程序,包括使用“隐式”流,结果是一样的。
在这一点上,我觉得这一定是iOS 9.3.5的一个问题(目前看来,操作系统的版本确实存在很多问题),但我找不到任何东西来解释这个特定的问题。
我希望有人有过类似的经历,可以确认这是iOS中的一个bug,也许可以提供一些解决方法。
更新时间:
问题似乎是Safari在发布到客户端回调URL的授权响应中阻止JavaScript的问题。
如果我们在Safari中关闭JavaScript,那么在这一步我们会看到“单击继续”按钮,可以继续完成身份验证并进入应用程序。显然,这不是一个可行的解决方案。我的问题是,是否有一种方法可以扩展该过程(可能是通过IdentityServer4中间件配置),以防止JavaScript被禁用?
更新时间:
我们将其进一步缩小为内容安全策略问题。
当响应由IdentityServer4生成时,它包括以下CSP:
默认src“无”;脚本src“sha256-VuNUSJ59bpCpw62HM2JG/hCyGiqoPN3NqGvNXQPU+rY=”
理解CSP但不理解较新内联脚本哈希的较旧浏览器采用“无”阻止脚本。
事实还证明,IdentityServer4在4天前发布了一个更新(2.2.0)(已对此进行了8天的研究),该更新通过添加允许配置CSP级别以支持的功能#2035来解决此问题;将此新选项设置为CSP1允许旧浏览器处理内联脚本。
IdentityServer4 Feature #2035