私は既存の MVC4 アプリ (.NET 4.5) を使用FormsAuthentication
してSessionAuthenticationModule
おり、ID への簡単な追加データと、最終的にはADFS (Active Directory Federation Services) のような STS (Security Token Service) サービスを使用して WIF (Windows Identity Foundation) を介して認証を実行しますが、それはすべて後で行います。
私の質問は、ユーザーが SessionAuthenticationModule を使用して認証されるときのタイムアウトを決定するものは何ですか?
このページを使用して認証を機能させましたが、正常に機能しているようです。基本的に私の認証はこのようになります。
ログイン アクション メソッドのスニペット
var personId = securityService.AuthenticateUser(model.Login, model.Password);
if (!personId.IsEmpty())
{
authenticationService.SignIn(personId, model.RememberMe);
if (Url.IsLocalUrl(model.ReturnUrl))
return Redirect(model.ReturnUrl);
else
return RedirectToAction("Index", "Home");
}
AuthenticationService.SignIn()
public void SignIn(Guid personId, bool createPersistentCookie)
{
var login = securityService.GetLoginByPersonId(personId);
if (String.IsNullOrEmpty(login.Name)) throw new ArgumentException("Value cannot be null or empty.", "userName");
var claims = LoadClaimsForUser(login.Name);
var identity = new ClaimsIdentity(claims, "Forms");
var claimsPrincipal = new ClaimsPrincipal(identity);
var token = new SessionSecurityToken(claimsPrincipal, ".CookieName", DateTime.UtcNow, DateTime.UtcNow.AddMinutes(30)) { IsPersistent = createPersistentCookie };
var sam = FederatedAuthentication.SessionAuthenticationModule;
sam.WriteSessionTokenToCookie(token);
}
AuthenticationService.LoadClaimsForUser()
private IEnumerable<Claim> LoadClaimsForUser(string userName)
{
var person = securityService.GetPersonByLoginName(userName);
if (person == null)
return null;
var claims = new List<Claim>();
claims.Add(new Claim(ClaimTypes.NameIdentifier, person.PersonId.ToString()));
claims.Add(new Claim(ClaimTypes.Name, userName));
/* .... etc..... */
}
しかし、これに関して私が持っていた唯一の懸念は、ユーザーがログインの有効期限が切れたときに再ログインを求められないように、有効期限のスライドの動作を保持したいということですが、この問題に取り組んでいると、見つからないことに気付きました彼らがログインしている時間を決定するもの。session timeout、form timeout、および SessionSecurityToken コンストラクターのvalidToパラメーターを 1 分に設定しましたが、それが経過してもサイトにアクセスできます。Cookie は「セッション」の有効期限日でブラウザに表示されますが、その理由はわかりませんが、Cookie がセッションに対して有効であっても、トークン、ID、または呼び出したいものが 1 分後に期限切れになることはありません。ユーザーに再ログインを強制しますか?