質問
SP 用のカスタム STS を使用しています。サイトは SSO 実装で SAML トークンが有効になっています。ログアウトが正しく機能しません。カスタム サインアウトを実装するにはどうすればよいですか。SP セッションまたは Cookie をクリアする必要がありますか?
解決
私は今朝まさにこのタスクに取り組んだところです。ログインしているサイトを追跡するにはカスタム STS が必要です。また、wsignout1.0 ハンドラーでリストを調べてサインアウトする必要があります。
このメソッドの完全な説明、ログインしている RP を追跡するヘルパー クラス、および wsignout ハンドラーに追加するコードはすべてここにあります。
http://netpl.blogspot.co.uk/2010/12/wif-ws-federation-and-single-sign-out.html
ただし、ヘルパー クラスに 1 つ変更を加え、サインアウト後に RP を追跡する Cookie を削除する CleanUp メソッドを追加しました。
public static void CleanUp()
{
HttpCookie siteCookie = HttpContext.Current.Request.Cookies[SITECOOKIENAME];
if (siteCookie != null)
HttpContext.Current.Response.Cookies[SITECOOKIENAME].Expires = DateTime.Now.AddDays(-1);
}
そして最後に、サインアウト ハンドラーの場合は、それを呼び出すだけです。私のサインアウトハンドラーブロックは次のとおりです。
else if ( action == WSFederationConstants.Actions.SignOut )
{
// Process signout request.
SignOutRequestMessage requestMessage = (SignOutRequestMessage)WSFederationMessage.CreateFromUri( Request.Url );
FederatedPassiveSecurityTokenServiceOperations.ProcessSignOutRequest( requestMessage, User, requestMessage.Reply, Response );
string[] signedInUrls = SingleSignOnManager.SignOut();
lblSignoutText.Visible = true;
foreach (string url in signedInUrls)
{
SignOutLinks.Controls.Add(
new LiteralControl(string.Format(
"<p><a href='{0}'>{0}</a> <img src='{0}?wa=wsignoutcleanup1.0' " +
"title='Signout request: {0}?wa=wsignoutcleanup1.0'/></p>", url)));
}
SingleSignOnManager.CleanUp();
}
まるで魔法のように機能します。lblSignoutText という asp:Label と SignOutLinks という div を Default.aspx に作成することを忘れないでください。
自分で解決しなければならない唯一のことは、各 SharePoint サイトのログアウト リンクを非表示にする必要があり、以下を指す独自のサインアウト リンクを作成する必要があることです。
http://mycustomsts/Default.aspx?wa=wsignout1.0
(この質問に出会ったとき、私は実際にこれを行うための賢い方法を探してグーグル検索していました。私の答えがお役に立てば幸いです!)