ASP .NET CORE 2.2 JWT 和声明网站身份验证

2024-04-01

我有一个 .net core 2.2 api,它(在成功登录时)生成一个 JWT 令牌,其中包含一个声明身份,该身份传递经过身份验证的用户的用户名、权限和角色等信息。

在我的.net core 2.2 中。 Web 应用程序我有一个登录机制,可以通过控制器的用户检索 JWT 令牌。

我的问题是。

如何从登录控制器中扩展令牌并设置我的 Web 应用程序以包含身份验证机制的使用,例如User.Identity.IsAuthenticated, User.IsInRole("Admin")和控制器操作,例如[Authorize] and [Authorize(Roles="Admin")]

我一直致力于查看外部身份验证提供商(例如 facebook/google)背后的源代码,但无济于事。

提前致谢。


第一步是使用cookie authentication in Startup.cs :

services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
.AddCookie();

services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);

In the Configure方法,使用UseAuthentication方法来调用设置 HttpContext.User 属性的身份验证中间件。调用前先调用UseAuthentication方法UseMvcWithDefaultRoute or UseMvc:

app.UseAuthentication();

然后在您的身份验证控制器中,在获取令牌并解码以获取声明后,您应该创建新的ClaimsIdentity,添加您的声明和登录用户:

if (!User.Identity.IsAuthenticated)
{
    var identity = new ClaimsIdentity(CookieAuthenticationDefaults.AuthenticationScheme, ClaimTypes.Name, ClaimTypes.Role);
    identity.AddClaim(new Claim(ClaimTypes.NameIdentifier, YourName));
    identity.AddClaim(new Claim(ClaimTypes.Name, YourName));
    identity.AddClaim(new Claim(ClaimTypes.Role, "Admin"));

    //Add your custom claims

    var principal = new ClaimsPrincipal(identity);
    await HttpContext.SignInAsync(CookieAuthenticationDefaults.AuthenticationScheme, principal, new AuthenticationProperties { IsPersistent = true });

}

之后,您可以使用User.Identity.IsAuthenticated, User.IsInRole("Admin") and [Authorize(Roles="Admin")]:

[Authorize(Roles = "Admin")]
public IActionResult About()
{
    var result = User.IsInRole("Admin");
    return View();
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ASP .NET CORE 2.2 JWT 和声明网站身份验证 的相关文章

随机推荐