3

Windows Identity Foundation (WIF) Security Token Service (STS)を使用してアプリケーションの認証を処理していますが、これは問題なく動作しています。ただし、STS で長時間ログインを取得できないようです。

私の理解では、アプリケーション レベルでクライアント トークンを気にする必要はありません。クライアント トークンは期限切れになる可能性があり、STS にリダイレクトされ、STS にログインしている限り、アプリケーションを更新する必要があるためです。トークン。それでも、サインインしたままにしたくないようです。

STS の login.aspx で発生することは次のとおりです。

var cookie = FormsAuthentication.GetAuthCookie(userName, persistTicket);

if (persistTicket)
    cookie.Expires = DateTime.Now.AddDays(14);

Response.Cookies.Add(cookie);

var returnUrl = Request.QueryString["ReturnUrl"];
Response.Redirect(returnUrl ?? "default.aspx");

これは、通常の Forms Auth を使用して既存のアプリケーションからほぼ直接取得されたものです。

私のweb.configから

<authentication mode="Forms">
      <forms loginUrl="Login.aspx" protection="All" timeout="2880" 
      name=".STS" path="/" requireSSL="false" slidingExpiration="true" 
      defaultUrl="default.aspx" cookieless="UseDeviceProfile" 
      enableCrossAppRedirects="false" />
</authentication>

サインイン後に Cookie を見ると、Cookie の有効期限が 14 日間に設定されており、Cookie がセッション Cookieではないことがわかります。

STS に再度ログインする必要がある場合、元の Cookie がまだ残っていることがわかります。

STS が Cookie に埋め込んでいるタイム スタンプ機能のようなものはありますか? 私の知る限り、それはまだ有効であるはずですが、それが私の Cookie を無効にしていますか?

4

2 に答える 2

2

@uoselからの提案を読んだ後、これは私をここで正確に何が起こっているのかについてより詳細な分析を行う道へと導きました。私の目標は、STS自体に対してのみ永続的なCookieを作成することであり、STSを消費するサイトに対しては作成しないことです。このようにして、STSを消費するサイトの有効期限が切れたときに、いつでもSTSレベルでユーザーを検証できます。

この一連の思考の中でより多くの移動が行われると、STSスターターサイトがforms authを使用して、index.aspxで発生する実際のWIF認証を保護することに気づきました。問題は、既存のフォーム認証チケットを使用してフォーム認証で保護されたインデックスページへの転送を処理するロジックがなかったことです。

これは私を次のような解決策に導きました

if(User.Identity.IsAuthenticated)
{    
    if(IsValidUserCredentials())
    {
       var returnUrl = Request.QueryString["ReturnUrl"];
       Response.Redirect(returnUrl ?? "default.aspx");
    }    
}
else
{
    DisplayLoginForm()
}
于 2010-09-02T14:52:04.283 に答える
1

パッシブ リダイレクトを使用している場合、persistentCookiesOnPassiveRedirectsを true に設定していますか?

<wsFederation passiveRedirectEnabled="true"
    persistentCookiesOnPassiveRedirects="true" />
于 2010-09-01T18:40:30.153 に答える