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

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

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

在我的.net核心2.2。 web app我有一个登录机制,它通过控制器的用户检索JWT令牌。

我的问题是。

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

我被指示查看外部身份验证提供商(如facebook / google)背后的源代码,但无济于事。

提前致谢。

c# asp.net-core .net-core jwt claims-based-identity
1个回答
3
投票

第一步是在cookie authentication中使用Startup.cs

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

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

Configure方法中,使用UseAuthentication方法调用设置HttpContext.User属性的Authentication Middleware。在调用UseMvcWithDefaultRouteUseMvc之前调用UseAuthentication方法:

app.UseAuthentication();

然后在你的auth控制器中,在获得令牌和解码以获得声明后,你应该创建新的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.IsAuthenticatedUser.IsInRole("Admin")[Authorize(Roles="Admin")]

[Authorize(Roles = "Admin")]
public IActionResult About()
{
    var result = User.IsInRole("Admin");
    return View();
}
© www.soinside.com 2019 - 2024. All rights reserved.