5

https://login.microsoftonline.com/login.srf?wa=wsignin1.0&wtrealm=で認証が実行される Windows azure Active Directory 認証に auth2.0 を使用しています。認証が成功した後、リダイレクトしています。当サイトへ。サイトをログアウトするには、サイトで生成されたすべての Cookie を削除し、login.microsoftonline.com/login.srf?wa=wsignin1.0&wtrealm=....... URL に再度リダイレクトしますが、現時点では取得していません任意のログイン資格情報画面が表示され、アクセス トークンを使用して当社のサイトにリダイレクトされます。ログアウトするにはどのようなプロセスが必要ですか。すべての Cookie を削除するか、ブラウザーを閉じてサイトを再度開くと、login.microsoftonline.com/login.srf?wa=wsignin1.0&wtrealm=........ url にリダイレクトされるためです。

ログアウトプロセスに次のコードを使用しています

    [NoCacheAttribute]
    public ActionResult LogOut()
    {
   UserCookieWrapper.delete_UserCookieWrapper();
     //This function delete all the datamemeber of the UserCookieWrapper class                             

     string[] theCookies =   
    System.IO.Directory.GetFiles(Environment.GetFolderPath(
    Environment.SpecialFolder.Cookies));
        foreach(string currentFile in theCookies)
        {
           try
           {
              System.IO.File.Delete(currentFile);
           }
           catch(Exception objEx) { }

        }                    
        Response.Clear();
       return RedirectToAction("Index", "Login"); 
       }
4

1 に答える 1

2

ユーザーはまだ Azure AD にサインインしているため、作成した Cookie をクリアしても役に立ちません。これが Web-SSO (Single-Sign-On) の仕組みです。Azure AD での認証に使用するプロトコルに関係なく、サインアウト (フェデレーション サインアウト) を適切に実装する必要があります。これは、 Google、Facebook、LinkedIn、Twitter など、インターネット上にあるすべてのweb-sso プロバイダーに当てはまります。

あなたがすることは、ID プロバイダーからではなく、アプリケーションからユーザーをサインアウトすることです。アプリケーションがユーザーを選択した ID プロバイダー (この場合は AAD) にリダイレクトすると、ユーザーがアクティブなセッションを持っている場合、ログイン画面は表示されません!

フェデレーション サインアウトを適切に実装するには、「Azure Active Directory での SSO の実装」を読む必要があります。「Sign Out Controller の実装」ステップに早送りできます。次のようなコードが表示されます。

public void SignOut()
{
     WsFederationConfiguration fc = 
            FederatedAuthentication.FederationConfiguration.WsFederationConfiguration;

     string request = System.Web.HttpContext.Current.Request.Url.ToString();
     string wreply = request.Substring(0, request.Length - 7);

     SignOutRequestMessage soMessage = 
                     new SignOutRequestMessage(new Uri(fc.Issuer), wreply);
     soMessage.SetParameter("wtrealm", fc.Realm);

     FederatedAuthentication.SessionAuthenticationModule.SignOut();
     Response.Redirect(soMessage.WriteQueryString());
} 

セクション全体 (できれば記事全体) を読んで、コードが何をするのか、なぜこの方法をとらなければならないのかを理解してください。

于 2013-09-18T10:36:09.330 に答える