2012-08-02 108 views
1

我有一个使用被动联合的主要网站(ADFS 2.0) 这个网站有一个使用jsonp调用MVC Web API网站的javascript。ADFS 2.0和jsonp

我想让这个WebAPI参与单点登录(同一台机器,不同的端口)。然而,被动重定向打破了jsonp。 (STS返回它自己的脚本,浏览器呈现,我永远不会重定向到我的响应脚本的真实url)

被动联合与jsonp webapi兼容吗? 如果不是,我如何在没有用户名/密码凭证的情况下使用Active Federation? 即,在调用webapi之前,用户将通过主网站进行身份验证,那么如何利用他们已经登录到webapi的事实?

回答

1

当您遇到此情况时,被动联合协议将不起作用。

你有两个选择:

  • 如果您的Web API被专门用于你的网站,你可以分享由WIF当用户验证生成的cookie。为此,如果您使用的是不同的网站,则应该配置WIF配置中的<cookieHandler>部分以使用相同的域和路径并使用FQDN(而不是机器名称),以便浏览器将网站和API同时识别为相同的域。

  • 第二个选项是配置Web API以提取和验证SAML令牌(在身份验证期间生成)。您需要做的是保存用于身份验证的令牌(在WIF配置的<service>元素上打开saveBootstrapToken),使用claimsIdentity.GetBootrapToken()扩展方法得到该令牌,并在JavaScript调用上将该令牌附加为HTTP头像“授权:承载...该令牌....”。在服务器端你必须得到它并验证令牌(以编程方式)。请注意,如果标记太大,您可能会因为标题长度而在IIS中达到配额。

+0

谢谢! Cookie设置是我所需要的 – 2012-08-02 18:04:16