1

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

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

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

4

1 回答 1

1

正如您所遇到的那样,被动联合协议在这种情况下将不起作用。

你有两个选择:

  • 如果您的 web api 被您的网站独占使用,您可以共享用户身份验证时由 WIF 生成的 cookie。为此,如果您使用不同的网站,则应将<cookieHandler>WIF 配置部分配置为使用相同的域和路径并使用 FQDN(而不是机器名称),以便浏览器将网站和 API 识别为相同领域。

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

于 2012-08-02T14:40:07.870 回答