Windows Identity Foundationセキュリティトークンサービスはログインし続けることができません
-
01-10-2019 - |
質問
Windows Identity Foundationを使用しています (wif) セキュリティトークンサービス (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");
これは、通常のフォーム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>
サインインした後、クッキーを見ると、クッキーの期限切れが将来14日間設定されていることがわかります。 いいえ セッションクッキー。
STSに戻ってログインする必要があるとき、元のCookieがまだそこにあることがわかります。
STSがCookieに埋め込まれているタイムスタンプ機能はありますが、私のCookieを無効にしている限り、それはまだ有効であるはずですか?
解決
@Uoselからの提案を読んだ後、これにより、ここで何が起こっているのかについて、より深い分析を行う道を進んでいます。一方、私の目標は、STS自体のみであり、STS消費サイトでは保存クッキーを作成することです。このようにして、STS消費サイトの有効期限で、STSレベルでユーザーをいつでも検証できます。
この一連の思考におけるより多くの運動があったので、STSスターターサイトはフォームAUTHを使用して、index.aspxで発生する実際のWIF認証を確保することがわかりました。問題は、既存のフォームAuthチケットを使用して、Forms Auth Secured Indexページへの転送を処理するロジックがなかったということでした。
これにより、に似た解決策に至ります
if(User.Identity.IsAuthenticated)
{
if(IsValidUserCredentials())
{
var returnUrl = Request.QueryString["ReturnUrl"];
Response.Redirect(returnUrl ?? "default.aspx");
}
}
else
{
DisplayLoginForm()
}
他のヒント
パッシブリダイレクトを使用している場合、あなたは持っていますか PersistentCookiesOnpassiveredirects trueに設定しますか?
<wsFederation passiveRedirectEnabled="true"
persistentCookiesOnPassiveRedirects="true" />