1

我有一个通过 ADFS 身份验证进行 Passport 身份验证的 SharePoint 应用程序 (App1)。我在另一个子域 (App2) 中有另一个 asp.net 应用程序,它也具有 ADFS 身份验证。从第一个应用程序我有一个 $.ajax (jquery) 调用来控制托管在另一个应用程序中。

问题是 FedAuth cookie 没有从 App1 发布到 App2。在 HTTP 跟踪中,我发现 FedAuth cookie 域名是特定于机器的。在 web.config “federatedAuthentication” 部分 -> cookieHandler 我提到域为“microsoft.com”。这解决了 FedAuth 在域属性中没有机器名称的问题。

进行此更改后,我遇到了以下错误:ID4230:SecurityToken 格式不正确。期望元素名称“SecurityContextToken”,找到“SP”。

在网上找不到帮助。尝试更改 cookieHandler 的路径和名称属性,但没有解决问题。更改名称会创建两个 FedAuth cookie。一种使用 FedAuth 名称,另一种使用新名称。

特别提示:如果认证后打开App1,将App2的URL粘贴到浏览器中,则静默认证正常,可以看到App2的控制。只有当我通过 Ajax 调用 App2 控件时才会出现问题。我尝试使用“凭据 = true -> XMLHTTPRequest 对象”调用 $.ajax,但无济于事。

任何帮助指针通过 Ajax 调用使静默身份验证工作正常?

4

1 回答 1

2

以下是我的场景。我有一个安全令牌服务提供商(STS 提供商)WIF Web 应用程序和 3 个 Web 客户端或依赖方 STSClient1、STSClient2 和一个 Sharepoint Web 客户端

如果所有客户端和 stsprovider 都在同一个域中,我会遇到与您提到的相同的错误,但当所有客户端和 stsprovider 都在不同域中时则不会。

在这篇文章中http://msdn.microsoft.com/en-us/magazine/ff872350.aspx

有人提到

至于cookie的名称和路径,名称默认为FedAuth,即应用程序目录的路径。为 cookie 指定一个唯一名称会很有用,特别是当解决方案中的许多 RP 应用程序共享同一个域时。相反,当您希望在同一域上的多个应用程序之间共享 cookie 时,您可以选择指定通用路径。

所以我去了每个客户并为cookie提供了一个唯一的名称,如下所示

<federatedAuthentication>
    <wsFederation passiveRedirectEnabled="true" issuer="[STSProviderURL]" realm="[ClientUrl]" requireHttps="false" />
    <cookieHandler requireSsl="false" name="[UniqueName]" />
</federatedAuthentication>
于 2012-11-08T05:18:16.123 回答