【问题标题】:ADFS 2.0 and jsonpADFS 2.0 和 jsonp
【发布时间】:2012-07-31 10:55:21
【问题描述】:
我有一个使用被动联合 (ADFS 2.0) 的主网站
这个网站有 javascript 调用一个使用 jsonp 的 MVC Web API 站点。
我正在尝试让这个 WebAPI 参与单点登录(同一台机器,不同的端口)。然而,被动重定向会破坏 jsonp。 (STS 返回浏览器呈现的自己的脚本,我永远不会重定向到我的响应脚本的真实 url)
被动联合是否与 jsonp webapi 兼容?
如果没有,我如何在没有用户名/密码凭据的情况下使用 Active Federation?
即用户将在调用 webapi 之前通过主网站进行身份验证,那么我如何利用他们已经在 webapi 中登录的事实?
【问题讨论】:
标签:
javascript
ajax
jsonp
adfs2.0
adfs
【解决方案1】:
在您遇到的这种情况下,被动联合协议将不起作用。
你有两个选择:
如果您的 Web api 被您的网站独占使用,您可以共享 WIF 在用户身份验证时生成的 cookie。为此,如果您使用不同的网站,则应将 WIF 配置中的 <cookieHandler> 部分配置为使用相同的域和路径并使用 FQDN(而不是机器名称),以便浏览器识别网站和 API作为同一个域。
第二个选项是配置 Web API 以提取和验证 SAML 令牌(在身份验证期间生成)。您在这里要做的是保存用于身份验证的令牌(打开 WIF 配置的 <service> 元素上的 saveBootstrapToken),使用 claimsIdentity.GetBootrapToken() 扩展方法获取它并将令牌附加到作为 HTTP 标头的 JavaScript 调用,例如“授权:持有者 ...the-token ....”。在服务器端,您必须获取并验证令牌(以编程方式)。请注意,如果令牌太大,您可能会因为标头长度而在 IIS 中达到配额。