2

Secure Token Service に対して、信頼できる ID プロバイダーとカスタム クレーム プロバイダーを使用する SharePoint 2010 サイトがあります。私が常に HTTP にいるとき、それは素晴らしいことです。私が常に HTTPS にいるとき、それは素晴らしいことです。しかし、HTTP から HTTPS に切り替えると、STS にリダイレクトされ、STS と mysite/_trust の間でループが始まります。

HTTP から使用される FedAuth Cookie が HTTPS に必要な FedAuth Cookie と一致しないように見えますが、STS はユーザーがログインしていることを認識し、新しい証明書を発行しません。

レルム http:mysite.site.com およびhttps://mysite.site.comを問題なく動作させる方法についてのアイデア。

更新: 多くのデバッグとコード変更の後、これは Cookie に関するクライアント側の問題のようです。HTTP にログインして HTTPS に切り替えると、正常に転送されます。しかし、HTTPS から HTTP に移行すると、ループに陥ります。これは、Cookie が「安全」に設定されているためだと思います。HTTP サイトで Cookie を読み取れないと思います。私の答えは、クッキーを「安全」にしないようにして、両側で使用できるようにする方法を見つけることかもしれません。

4

2 に答える 2

0

これに対するもう 1 つの答えは、代替アクセス マッピングで HTTP と HTTPS を同じゾーンに配置することです。次に、cookiehandler をオーバーライドして、HTTP と HTTPS で同じ Cookie を使用できるようにする必要があります。

http://www.msngn.com/blog/Lists/Posts/Post.aspx?ID=5

于 2013-03-12T15:12:56.127 に答える
0

この問題にアプローチするには 2 つの方法があります。問題は、FedAuth Cookie が安全で HTTPOnly とマークされていることです。したがって、HTTPS から HTTP に切り替えると、Cookie は SharePoint /_trust/ によって読み取られません。

私が行ったアプローチは、_login ディレクトリの default.aspx を変更することでした。C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\14\template\identitymodel\login\ にあります。

既存の default.aspx をこの default.aspx ページに置き換えました

<%@ Assembly Name="Microsoft.SharePoint.IdentityModel, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>
<%@ Register Tagprefix="SharepointIdentity" Namespace="Microsoft.SharePoint.IdentityModel" Assembly="Microsoft.SharePoint.IdentityModel, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>
<%@ Assembly Name="Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c"%> 
<%@ Import Namespace="Microsoft.SharePoint.WebControls" %> 
<%@ Register Tagprefix="SharePoint" Namespace="Microsoft.SharePoint.WebControls" Assembly="Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %> 
<%@ Register Tagprefix="Utilities" Namespace="Microsoft.SharePoint.Utilities" Assembly="Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %> 
<%@ Import Namespace="Microsoft.SharePoint" %> <%@ Assembly Name="Microsoft.Web.CommandUI, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>
<%@ Page Language="C#"  MasterPageFile="~/_layouts/simple.master"  %>

<asp:Content ID="PageHead" ContentPlaceHolderID="PlaceHolderAdditionalPageHead" runat="server">

</asp:Content>

<asp:Content ID="Main" ContentPlaceHolderID="PlaceHolderMain" runat="server">

<script language="C#" runat="server">

        protected void Page_Load(object sender, EventArgs e)
        {
            string killed = "no";

            if (Request.Cookies["FedAuth"] != null)
            {
                killed = "yes";

        HttpCookie expiredCookie = new HttpCookie("FedAuth");
                expiredCookie.Expires = DateTime.UtcNow.AddDays(-1);
                Response.Cookies.Add(expiredCookie);                
            }

            string returnURL = Request["ReturnUrl"].ToString();

            Response.Redirect("/_trust/default.aspx?trust=SSO%20Trusted%20Provider&ReturnUrl=" + returnURL + "&cooke=" + killed);
        }

 </script>

</asp:Content>

コードビハインドはありません。

それにアプローチするもう 1 つの方法は、新しい Cookie ハンドラーで Cookie を変更することです。ここでそれを見ることができます。http://www.msngn.com/blog/Lists/Posts/Post.aspx?ID=5

于 2013-01-04T01:29:44.627 に答える