gpt4 book ai didi

asp.net - 将 FormsAuthentication 替换为 SessionAuthenticationModule (SAM) 以实现 Claims Aware 身份

转载 作者:行者123 更新时间:2023-12-02 12:07:22 25 4
gpt4 key购买 nike

我有一个现有的 MVC4 应用程序 (.NET 4.5),使用 FormsAuthentication我希望改用 SessionAuthenticationModule这样我就可以获得一个声明感知的身份,以便轻松地将附加数据添加到身份中,并作为最终迁移到使用 ADFS 等 STS(安全 token 服务)服务通过 WIF(Windows Identity Foundation)执行身份验证的第一步( Active Directory 联合身份验证服务),但这都是以后的事了。

My question is, what determines the timeout when a user is authenticated using SessionAuthenticationModule?

我用了this page让我的身份验证工作正常,而且看起来工作正常。基本上我的身份验证看起来像这样。

我的登录操作方法的片段

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 , forms timeoutvalidTo SessionSecurityToken 构造函数上的参数设置为 1 分钟,但即使在这之后,我仍然能够访问该网站。 cookie 在浏览器中显示的过期日期为“Session”,我不确定为什么,但即使 cookie 对 session 有效, token 、身份或任何您想要调用的内容也不应该在 1 分钟后过期并强制用户重新登录?

最佳答案

我曾经遇到过类似的问题,这是我的问题,其中包含我在 token 过期时使 cookie 无效的方法

How to set the timeout properly when federating with the ADFS 2.0

添加一些不同的逻辑可以让您滑动过期时间

http://brockallen.com/2013/02/17/sliding-sessions-in-wif-with-the-session-authentication-module-sam-and-thinktecture-identitymodel/

web.config - 设置 MaxClockSkew

<system.identityModel>
<identityConfiguration>
<securityTokenHandlers>
<securityTokenHandlerConfiguration maximumClockSkew="0">
</securityTokenHandlerConfiguration>
</securityTokenHandlers>
</identityConfiguration>
</system.identityModel>

关于asp.net - 将 FormsAuthentication 替换为 SessionAuthenticationModule (SAM) 以实现 Claims Aware 身份,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16551180/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com