在.net core微服务中访问ApplicationSessionState

问题描述 投票:0回答:1

我有一个在 .NET 4.8 上运行的 ASP.NET MVC 应用程序,它创建和共享 JWT 令牌并维护用户会话。

我有一个 ASP.NET Core 3.1 Web API 微服务,它使用

RSACryptoServiceProvider
验证 JWT 令牌。

.NET Core 有没有办法检查用户是否仍然登录?

注意:在 ASP.NET MVC 应用程序中,我们使用

ApplicationSessionState
进行检查。

asp.net-mvc asp.net-core session-state
1个回答
0
投票

在asp.net core中,通常我们会使用身份验证中间件和身份验证服务(例如JWT身份验证服务)来检查用户是否经过身份验证。

然后在控制器内部,我们可以通过使用用户的声明来检查用户状态,并

User.Identity.IsAuthenticated
检查用户是否登录。

简而言之,在 ASP.NET Core 中,如果客户端发送带有正确身份验证令牌的请求,并且该令牌通过了身份验证中间件,则会将 IsAuthenticated 属性设置为 ture,这意味着用户已登录。

如果您想使用自定义逻辑来检查令牌,一种可能的方法是使用 asp.net core AuthorizationHandler。

更多详情,可以参考以下代码:

定制需求类别:

public class CustomAuthenticationRequirement : IAuthorizationRequirement
{
}

自定义处理程序:

public class CustomAuthenticationHandler : AuthorizationHandler<CustomAuthenticationRequirement>
{
    protected override Task HandleRequirementAsync(AuthorizationHandlerContext context, CustomAuthenticationRequirement requirement)
    {
        //your previous codes to check the user
        if (context.Resource is HttpContext authorizationFilterContext)
        {
            if (authorizationFilterContext.Request.Headers.ContainsKey("Authorization"))
            {
                    //
                    var claims = new List<Claim>
                {
                    new Claim(ClaimTypes.Name, "aa")
                };

                    var identity = new ClaimsIdentity(claims, "custom");
                    var principal = new ClaimsPrincipal(identity);
                    authorizationFilterContext.User = principal;

                    context.Succeed(requirement);
                //}
            }
        }

        return Task.CompletedTask;
    }

    private bool IsAuthorizedUser(string username, string password)
    {
        return username == "test" && password == "pass";
    }
}

Program.cs,对于 3.1,您将

builder.Services.AddAuthorization
替换为
services.AddAuthorization

builder.Services.AddAuthorization(options =>
{
    options.AddPolicy("CustomAuthentication", policy =>
        policy.Requirements.Add(new CustomAuthenticationRequirement()));
});

builder.Services.AddSingleton<IAuthorizationHandler, CustomAuthenticationHandler>();

结果:

© www.soinside.com 2019 - 2024. All rights reserved.