WIF Web アプリケーション、カスタム STS、および ADFS 2.0 インスタンスをその間にセットアップしました。アプリケーションのサインアウト プロセスを理解するのに苦労しています。現在、ユーザーがサインアウト ボタンをクリックすると、次のコードが呼び出されます。
WSFederationAuthenticationModule.FederatedSignOut(null, new Uri("https://myrelyingpartyapp.com/?wa=wsignoutcleanup1.0"));
このコードを使用すると、正常に動作します。すべての Cookie とセッションが正しく破棄されます。唯一の問題は、プロセスが終了した後、ブラウザーに小さな緑色のチェックが表示されることです。明らかに、STS のログイン ページにリダイレクトされることを望んでいます。これを達成するために、次のコードを試みました。
WSFederationAuthenticationModule.FederatedSignOut(null, new Uri("https://myrelyingpartyapp.com/?wa=wsignoutcleanup1.0&wreply=" + HttpUtility.UrlEncode("https://myrelyingpartyapp.com/Default.aspx")));
私の考えでは、wreply によってユーザーが認証されていない証明書利用者アプリにリダイレクトされ、STS ログイン ページにリダイレクトされると考えていました。代わりに、これによりADFSでエラーが発生します(エラーページが役立つため、表示できません)。wreplyに使用するURLに関係なく、エラーがスローされます。wsignoutcleanup1.0 を正しく使用していますか? 参考までに、サインイン/サインアウト要求を処理する STS のコードを次に示します。
if (action == "wsignin1.0")
{
SignInRequestMessage signInRequestMessage = (SignInRequestMessage)WSFederationMessage.CreateFromUri(Request.Url);
if (User != null && User.Identity != null && User.Identity.IsAuthenticated)
{
SecurityTokenService securityTokenService = new CustomSecurityTokenService(CustomSecurityTokenServiceConfiguration.Current);
SignInResponseMessage signInResponseMessage = FederatedPassiveSecurityTokenServiceOperations.ProcessSignInRequest(signInRequestMessage, User as ClaimsPrincipal, securityTokenService);
FederatedPassiveSecurityTokenServiceOperations.ProcessSignInResponse(signInResponseMessage, Response);
}
else
{
throw new UnauthorizedAccessException();
}
}
else if (action == "wsignout1.0")
{
SignOutRequestMessage signOutRequestMessage = (SignOutRequestMessage)WSFederationMessage.CreateFromUri(Request.Url);
FederatedPassiveSecurityTokenServiceOperations.ProcessSignOutRequest(signOutRequestMessage, User as ClaimsPrincipal, signOutRequestMessage.Reply, Response);
}