我有一个SharePoint应用程序(App1),它通过ADFS身份验证进行Passport身份验证。我在另一个子域(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控件时才会出现问题。我试图用凭证=真的调用$ .ajax“ - > XMLHTTPRequest对象)但无济于事。
通过Ajax调用使静默身份验证工作正常的任何帮助指针?
答案 0 :(得分: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>