代码之家  ›  专栏  ›  技术社区  ›  Aaron

IdentityServer4和运行在iOS 9.3.5上的客户端(禁用JavaScript)

  •  1
  • Aaron  · 技术社区  · 7 年前

    首先,我要说的是,我对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

    1 回复  |  直到 7 年前
        1
  •  0
  •   Aaron    7 年前

    IdentityServer4最近发布了一个更新(2.2.0),其中添加了 Feature #2035 允许配置CSP级别以支持。

    设置新 选项。Csp。数量 选项1允许旧浏览器处理内联脚本。