Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在asp.net core中实现基于策略的角色授权时随机会话过期_C#_.net_Session_Asp.net Core - Fatal编程技术网

C# 在asp.net core中实现基于策略的角色授权时随机会话过期

C# 在asp.net core中实现基于策略的角色授权时随机会话过期,c#,.net,session,asp.net-core,C#,.net,Session,Asp.net Core,我们开发了一个ASP.NET核心Web应用程序,它在本地和服务器上都运行良好 在实现基于自定义策略的角色授权时,如果我已在服务器上上载了dll代码,则会话将在超时之前过期&用户将重定向到登录页面 我不知道在实现自定义策略授权时,是什么原因导致会话这么快过期。我的观点是,应用程序在没有实现基于角色的授权的情况下可以很好地处理会话 我从redis获得了会话和用户角色 protected override Task HandleRequirementAsync(AuthorizationHandler

我们开发了一个ASP.NET核心Web应用程序,它在本地和服务器上都运行良好

在实现基于自定义策略的角色授权时,如果我已在服务器上上载了dll代码,则会话将在超时之前过期&用户将重定向到登录页面

我不知道在实现自定义策略授权时,是什么原因导致会话这么快过期。我的观点是,应用程序在没有实现基于角色的授权的情况下可以很好地处理会话

我从redis获得了会话和用户角色

protected override Task HandleRequirementAsync(AuthorizationHandlerContext context, RoleRequirement requirement)
    {
        RedisConnection redis = new RedisConnection();
        if (SessionId == null | SessionId == string.Empty)
        {
            context.Fail();
        }
        else
        {
            string MemberDetails = redis.GetMemberSession(SessionId);
            RedisModel SessionDetails = JsonConvert.DeserializeObject<RedisModel>(Details);
            Role = SessionDetails.UserRoleLevel.ToUpper().Trim();

            switch (requirement.Roles)
            {
                case Constants.MEMBER:
                    if (Role == requirement.Roles)
                    {
                        context.Succeed(requirement);
                    }
                    break;
                case Constants.PROVIDER:
                    if (Role == requirement.Roles)
                    {
                        context.Succeed(requirement);
                    }
                    break;
                case Constants.ADMIN:
                    if (Role == requirement.Roles)
                    {
                        context.Succeed(requirement);
                    }
                    break;








    [HttpGet("nname")]
    [Authorize(Policy = "ADMIN")]
    [ServiceFilter(typeof(Filter))]
    public IActionResult NName()
    {
        ............
        ............
    }
protected override Task HandleRequirementAsync(授权handler上下文,角色需求)
{
RedisConnection redis=新的RedisConnection();
if(SessionId==null | SessionId==string.Empty)
{
context.Fail();
}
其他的
{
字符串MemberDetails=redis.GetMemberSession(SessionId);
RedisModel SessionDetails=JsonConvert.DeserializeObject(详细信息);
Role=SessionDetails.UserRoleLevel.ToUpper().Trim();
交换机(需求.角色)
{
case.MEMBER:
if(角色==需求.角色)
{
成功(要求);
}
打破
case.PROVIDER:
if(角色==需求.角色)
{
成功(要求);
}
打破
case.ADMIN:
if(角色==需求.角色)
{
成功(要求);
}
打破
[HttpGet(“nname”)]
[授权(Policy=“ADMIN”)]
[服务过滤器(类型(过滤器))]
公共IActionResult NName()
{
............
............
}

您在代码中设置了什么身份验证会话过期时间?实际过期时间是什么?身份验证会话过期时间是2小时。每次的实际过期时间都不同。它将在5或10分钟后过期,依此类推。您可以分享一些实现的代码片段吗?我想问题可能出在IIS上。但我不确定。