以下是场景 - 我们为移动客户端启用了SSO,当他们希望使用SSO Auth进程时,我们生成了一个浏览器进程来处理SAML令牌生成过程。它一直运作良好,直到最近我们在客户使用ADFS并尝试从IOS客户端登录的特定情况下遇到问题。 IOS客户端默认使用Safari,因此这种情况下的两个玩家是Safari(Apple)和ADFS(Microsoft)
因此,序列首先浏览到一个URL(简化为https://sso.mycomp.com/!saml2/scg3/sp-sso/post),这是第一个作为SAML流程的一部分命中的URL。我从这个终点收到的HTML内容如下所示。 (为清楚起见,我删除了SAML数据)
<html xmlns="http://www.w3.org/1999/xhtml">
<body onload="document.forms.samlform.submit()">
<noscript><p><strong>Note:</strong> No JS, press the Continue to proceed.</p></noscript>
<form id="samlform" action="https://intranet.mycomp.com/adfs/ls/" method="post">
<div>
<input type="hidden" name="SAMLRequest" value”***SAML_REQUEST_DATA_WAS_HERE***”>
<input type="hidden" name="RelayState" value="default"/>
</div>
<noscript><div><input type="submit" value="Continue"/></div></noscript>
</form>
</body>
</html>
它基本上要求浏览器在浏览器加载HTML文档后对https://intranet.mycomp.com/adfs/ls/执行 发布 操作。正文 onLoad 标记(第2行)和表单 操作/方法 标记(第4行)在页面加载后定义要执行的操作 - 即发布到https://intranet.mycomp.com/adfs/ls/。
但我从Safari和Chrome浏览器获得的回复却有所不同。在Chrome上,事情按预期工作,但在Safari上,SSO序列中断。
这是来自Chrome的查尔斯追踪。
这是来自Safari的踪迹。使用相同的响应,它会执行“获取”
有没有办法克服这个问题或解决方法?为什么Safari不进行POST并尊重传递给它的HTML?
任何信息都会有所帮助。
版本: Chrome - 版本51.0.2704.103(64位) Safari - 版本9.1.1(11601.6.17) ADFS - 2.0