防止一个用户在不同的浏览器.net Core中登录



我想创建一个包含用户和密码的登录页面。. NET Core 5.

如何防止同一用户在不同浏览器中登录?

我建议在登录时创建一个唯一的令牌,该令牌存储在服务器上,并作为加密的cookie值传递回客户端,或者如果您使用Claims身份验证作为声明。然后编写一个过滤器来测试发送的令牌是否与服务器端在Authentication上存储的值匹配。您可能希望存储和更新令牌上的日期时间-类似于滑动缓存项-以便您可以过期令牌。

当另一个浏览器或登录发生并且令牌在特定日期内时,您可以抑制登录尝试或生成新的令牌,该令牌将注销第一个浏览器用户。

过滤器示例如下:

public class SignOnCheckerFilter : IAuthorizationFilter
{
public SignOnCheckerFilter (){}
public void OnAuthorization(AuthorizationFilterContext context)
{
bool checkOk = false;
if (context.HttpContext.User.Identity.IsAuthenticated)
{
//read cookie or claims

//check match
//if match success
checkOk = true;
}
//return if checkOk
if(checkOk) return;
//return forbidden result if invalid match (you could redirect the user to a logout page?)
context.Result = new ForbidResult();
}
}

相关内容

  • 没有找到相关文章

最新更新