3

私はasp.net 1.1で書かれたメインのasp.netアプリを持っています。アプリケーションの下で実行されているのは、いくつかの 2.0 アプリです。ユーザーを完全にログアウトするには、FormsAuthentication.SignOut を使用して 1.1 アプリからログアウトできますか、それとももっと複雑ですか?

4

4 に答える 4

5

あなたがしようとしていることは、シングルサインオンとシングルサインオフと呼ばれています。アプリケーションの設定方法によって違いがあります。これらの違いがどこに影響を与えるのかを明確にしようと思います。

シングル サインオンとシングル サインオフを実装するには、Cookie の名前、保護、およびパスの属性をすべてのアプリケーションで同じにする必要があります。

<authentication mode="Forms">
    <forms name=".cookiename"
           loginUrl="~/Login.aspx" 
           timeout="30" 
           path="/" />
</authentication>

次に、マシン キーを追加する必要があります。マシン キーは、すべてのアプリケーションで同じにする必要があります。

<machineKey validationKey="F9D1A2D3E1D3E2F7B3D9F90FF3965ABDAC304902"
            encryptionKey="F9D1A2D3E1D3E2F7B3D9F90FF3965ABDAC304902F8D923AC"
            validation="SHA1" />

アプリケーションに第 2 レベル ドメインまたは第 3 レベル ドメインを使用していますか? その場合、Cookie にドメインを追加して、もう少し処理を行う必要があります。

protected void Login(string userName, string password)
{
    System.Web.HttpCookie cookie = FormsAuthentication.GetAuthCookie(userName, False);
    cookie.Domain = "domain1.com";
    cookie.Expires = DateTime.Now.AddDays(30);
    Response.AppendCookie(cookie);
}

シングル サインオフを行うには、FormsAuthentication.SignOut を呼び出すだけでは不十分な場合があります。次善の策は、Cookie の有効期限を過去の日付に設定することです。これにより、Cookie が認証に再度使用されなくなります。

protected void Logout(string userName)
{
    System.Web.HttpCookie cookie = FormsAuthentication.GetAuthCookie(userName, False);
    cookie.Domain = "domain1.com";
    cookie.Expires = DateTime.Now.AddDays(-1);
    Response.AppendCookie(cookie);
}

すべてのアプリケーションに同じデータベースを使用していることを考慮しています。アプリケーションが登録と認証に別のデータベースを使用する場合は、さらに多くのことを行う必要があります。その場合はお知らせください。そうでなければ、これはうまくいくはずです。

于 2008-09-11T00:51:29.737 に答える
0

web.config を使用したい

<authentication mode="Forms">
    <forms domain=".tv.loc" loginUrl="~/signin" timeout="2880" name="auth" />
</authentication>
于 2010-06-30T15:43:02.883 に答える
0

すべてのアプリケーションに対して中央のセッション ストアがある場合は、より簡単になる可能性があります。その後、1 か所でセッションを null に設定できます。

于 2008-09-11T00:26:15.787 に答える
0

これは私のために働いた:

Logout イベントでは、FormsAuthentication.GetAuthCookie メソッドの代わりに、以下のように Request オブジェクトで Cookies コレクションを使用します。

HttpCookie cookie = Request.Cookies.Get(otherSiteCookieName);
cookie.Expires = DateTime.Now.AddDays(-1);
HttpContext.Current.Response.Cookies.Add(cookie);

もちろん、これには、ユーザーをログアウトさせたいサイトの Cookie 名を知っている必要がありますが、すべての Web アプリで同じ Cookie を使用している場合は問題ありません。

于 2010-02-17T12:34:01.927 に答える