首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何从jwt令牌登录用户并设置角色.net core 2.2

在.NET Core 2.2中,我们可以使用JWT令牌来实现用户登录并设置角色。JWT(JSON Web Token)是一种用于身份验证和授权的开放标准,它可以安全地在客户端和服务器之间传输信息。

下面是一个完整的步骤来实现从JWT令牌登录用户并设置角色的过程:

  1. 首先,我们需要在.NET Core 2.2应用程序中添加所需的依赖项。可以使用NuGet包管理器或手动添加以下包:
    • Microsoft.AspNetCore.Authentication.JwtBearer:用于JWT身份验证
    • System.IdentityModel.Tokens.Jwt:用于JWT令牌处理
  • 在.NET Core 2.2应用程序的Startup.cs文件中,配置身份验证服务和JWT令牌验证:
代码语言:txt
复制
using Microsoft.AspNetCore.Authentication.JwtBearer;
using Microsoft.IdentityModel.Tokens;

public void ConfigureServices(IServiceCollection services)
{
    // 添加身份验证服务
    services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
        .AddJwtBearer(options =>
        {
            options.TokenValidationParameters = new TokenValidationParameters
            {
                ValidateIssuer = true,
                ValidateAudience = true,
                ValidateLifetime = true,
                ValidateIssuerSigningKey = true,
                ValidIssuer = "your_issuer",
                ValidAudience = "your_audience",
                IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("your_secret_key"))
            };
        });

    // 其他配置...
}

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    // 启用身份验证中间件
    app.UseAuthentication();

    // 其他配置...
}

在上述代码中,我们配置了JWT令牌的验证参数,包括发行者(Issuer)、接收者(Audience)、密钥(Secret Key)等。

  1. 创建一个控制器来处理用户登录请求,并生成JWT令牌:
代码语言:txt
复制
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Configuration;
using Microsoft.IdentityModel.Tokens;
using System;
using System.IdentityModel.Tokens.Jwt;
using System.Security.Claims;
using System.Text;

[Route("api/[controller]")]
[ApiController]
public class AuthController : ControllerBase
{
    private readonly IConfiguration _configuration;

    public AuthController(IConfiguration configuration)
    {
        _configuration = configuration;
    }

    [AllowAnonymous]
    [HttpPost("login")]
    public IActionResult Login(string username, string password)
    {
        // 在此处进行用户验证逻辑,验证成功后生成JWT令牌

        var claims = new[]
        {
            new Claim(ClaimTypes.Name, username),
            new Claim(ClaimTypes.Role, "admin") // 设置用户角色
        };

        var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_configuration["Jwt:SecretKey"]));
        var credentials = new SigningCredentials(key, SecurityAlgorithms.HmacSha256);

        var token = new JwtSecurityToken(
            _configuration["Jwt:Issuer"],
            _configuration["Jwt:Audience"],
            claims,
            expires: DateTime.Now.AddMinutes(30),
            signingCredentials: credentials
        );

        return Ok(new
        {
            token = new JwtSecurityTokenHandler().WriteToken(token)
        });
    }

    // 其他操作...
}

在上述代码中,我们使用JwtSecurityTokenHandler生成JWT令牌,并将其返回给客户端。

  1. 在需要进行身份验证的控制器或操作上添加[Authorize]特性:
代码语言:txt
复制
[Authorize(Roles = "admin")]
[HttpGet("admin")]
public IActionResult AdminAction()
{
    // 只有具有"admin"角色的用户才能访问此操作
    return Ok("Admin action executed.");
}

通过添加[Authorize(Roles = "admin")]特性,我们限制了只有具有"admin"角色的用户才能访问该操作。

以上就是使用JWT令牌从.NET Core 2.2中实现用户登录并设置角色的基本步骤。在实际应用中,您可能还需要添加更多的安全措施和错误处理机制。关于JWT令牌的更多信息,您可以参考腾讯云的相关文档和产品:

请注意,以上答案中没有提及亚马逊AWS、Azure、阿里云、华为云、天翼云、GoDaddy、Namecheap、Google等流行的云计算品牌商。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

ASP.NET Core 3.0 一个 jwt 的轻量角色用户、单个API控制的授权认证库

目录 说明 说明 ASP.NET Core 3.0 一个 jwt 的轻量角色/用户、单个API控制的授权认证库 最近得空,重新做一个角色授权库,而之前做了一个角色授权库,是利用微软的默认接口做的,查阅了很多文档...使用默认接口实现授权认证,可以参考我另一篇文章 ASP.NET Core 使用 JWT 自定义角色/策略授权需要实现的接口 得益于大笨熊哥的引导,利用放假时间重新做了一个,利用微软本身的授权认证,在此基础上做拓展...此库更新到 .Net Core 3.0 了,如果需要在 2.2X 上使用,可以到仓库下载项目,然后把 Nuget 包换成 2.2 的。 感谢大笨熊哥的指导。...三、如何设置API的授权 很简单,CZGL.Auth 的认证授权,你只需在 Controller 或 Action上 添加 [Authorize]。...六、验证 先使用 aa 用户登录登录时选择 A 角色。 ? 因为 A 用户只能访问 “带有 A ” 的API, "/A"、"/AB" 等,所以我们可以试试。 ?

67340

ASP.NET Core 集成JWT

JWT的声明一般被用来在身份提供者和服务提供者间传递被认证的用户身份信息,以便于资源服务器获取资源,也可以增加一些额外的其它业务逻辑所必须的声明信息,该token也可直接被用于认证,也可被加密。...什么时候应该使用JWT? 以下是JSON Web令牌有用的一些情况: 授权:这是使用JWT的最常见方案。一旦用户登录,每个后续请求将包括JWT,从而允许用户访问该令牌允许的路由,服务和资源。...如何使用JWT 每当用户想要访问受保护的路由或资源时,用户代理都应发送JWT,通常使用承载模式在Authorization标头中发送JWT 。....net coreJWT验证授权 新建一个.net core webapi的项目,版本可选择3.1 + 先使用nuget安装:Microsoft.AspNetCore.Authentication.JwtBearer...注意版本和.net core版本的兼容。net5的支持5.0.0+的版本,否则就用对应可以用的低版本吧。

21810

【 .NET Core 3.0 】框架之五 || JWT权限验证

2)授权服务根据用户身份,生成一张专属“令牌”,并将该“令牌”以JWT规范返回给客户端 3)客户端将获取到的“令牌”放到http请求的headers中后,向主服务系统发起请求。...主服务系统收到请求后会headers中获取“令牌”,并从“令牌”中解析出该用户的身份权限,然后做出相应的处理(同意或拒绝返回资源) 零、生成 Token 令牌 关于JWT授权,其实过程是很简单的,大家其实这个时候静下心想一想就能明白...,这个就是四步走: 首先我们需要一个具有一定规则的 Token 令牌,也就是 JWT 令牌(比如我们的公司门禁卡),//登录 然后呢,我们再定义哪些地方需要什么样的角色(比如领导办公室我们是没办法进去的...Claim 是对被验证主体特征的一种表述,比如:登录用户名是...,email是...,用户Id是...,其中的“登录用户名”,“email”,“用户Id”就是ClaimType。...四、常见疑惑解析 1、JWT里会存在一些用户的信息,比如用户id、角色role 等等,这样会不会不安全,信息被泄露?

2K30

壹开始前后端分离【 .NET Core2.2 +Vue2.0 】框架之五 || Swagger的使用 3.3 JWT权限验证

2)授权服务根据用户身份,生成一张专属“令牌”,并将该“令牌”以JWT规范返回给客户端 3)客户端将获取到的“令牌”放到http请求的headers中后,向主服务系统发起请求。...主服务系统收到请求后会headers中获取“令牌”,并从“令牌”中解析出该用户的身份权限,然后做出相应的处理(同意或拒绝返回资源) 零、生成 Token 令牌 关于JWT授权,其实过程是很简单的,大家其实这个时候静下心想一想就能明白...,这个就是四步走: 首先我们需要一个具有一定规则的 Token 令牌,也就是 JWT 令牌(比如我们的公司门禁卡),//登录 然后呢,我们再定义哪些地方需要什么样的角色(比如领导办公室我们是没办法进去的...,具体的细节知识,还是大家摸索,还是那句话,这里只是抛砖引玉的作用哟,通过阅读本文,你会了解到,什么是JWT如何添加配置.net core 中间件,如何使用Token验证,在以后的项目里你就可以在登录的时候...四、常见疑惑解析 1、JWT里会存在一些用户的信息,比如用户id、角色role 等等,这样会不会不安全,信息被泄露?

1.9K30

【知识】JWT数据格式及实现单点登录原理

通俗来讲,JWT是一个含签名携带用户相关信息的加密串,页面请求校验登录接口时,请求头中携带JWT串到后端服务,后端通过签名加密串匹配校验,保证信息未被篡改。...2.2 JWT 的数据结构 2.2.1 传统 session 认证及其弊病 互联网服务离不开用户认证。一般流程是下面这样。 1、用户向服务器发送用户名和密码。...2、服务器验证通过后,在当前对话(session)里面保存相关数据,比如用户角色登录时间等等。 3、服务器向用户返回一个 session_id,写入用户的 Cookie。...拦截器中校验JWT有效性,并在response中重新设置JWT的新值; 最后在JWT服务端,依赖JWT工具包,在登录方法中,需要在登录校验成功后调用生成JWT方法,生成一个JWT令牌并且设置到response...(8)JWT全面解读、使用步骤 https://blog.csdn.net/achenyuan/article/details/80829401 【说明】JAVA实现代码 (9)看图理解JWT如何用于单点登录

1.3K20

使用 JWT 技术,简单快速实现系统间的单点登录

它的定义是多个应用系统间,只需要登录一次就可以访问所有相互信任的应用系统。下面介绍用jwt技术如何来实现单点登录。...二,认证过程 下面我们从一个实例来看如何运用JWT机制实现认证: 登录 第一次认证:第一次登录用户浏览器输入用户名/密码,提交后到服务器的登录处理的动作层(Login Action); 登录操作调用认证服务进行用户名密码认证...,如果认证通过,登录操作层调用用户信息服务获取用户信息(包括完整的用户信息及对应权限信息); 返回用户信息后,登录操作配置文件中获取令牌签名生成的秘钥信息,进行令牌的生成; 生成令牌的过程中可以调用第三方的...JWT Lib生成签名后的JWT数据; 完成JWT数据签名后,将其设置到COOKIE对象中,并重定向到首页,完成登录过程; ?...,调用JWT Lib对令牌信息进行解密和解码; 完成解码验证签名通过后,对令牌中的exp,nbf,aud等信息进行验证;全部通过后,根据获取的用户角色权限信息,进行对请求的资源的权限逻辑判断; 如果权限逻辑判断通过则通过

77030

微服务中的鉴权该怎么做?

认证服务 2.1 登录 2.2 校验 3. 授权服务 3.1 外部请求 3.2 内部请求 转载 ---- 1....,设置过期时间,判断用户是否登录时,需要先去 Redis 上查看 JWT 字符串是否存在,存在的话再对 JWT 字符串做解析操作,如果能成功解析,就没问题,如果不能成功解析,就说明令牌不合法。...,就去看下 Redis 上令牌的过期时间,快过期了,就重新设置一下,其他都一模一样。...另一方面自定义权限注解和角色注解,在切面中对这些注解进行解析,检查当前用户是否具备所需要的角色/权限等。...---- 2.2 校验 校验是指每一个请求到达的时候,校验用户是否已经登录。 这个当然可以和 2.1 放到一起去做,但是松哥不建议。

60930

Node.js-具有示例API的基于角色的授权教程

使用Node.js构建的教程 其他可用版本: ASP.NET: ASP.NET Core 3.1, ASP.NET Core 2.2 在本教程中,我们将通过一个简单的示例介绍如何在JavaScript...如果用户名和密码正确,则返回JWT身份验证令牌。.../users - 仅限于“Admin”用户的安全路由,如果HTTP授权header包含有效的JWT令牌并且用户处于“Admin”角色,则它接受HTTP GET请求返回所有用户的列表。...如果将角色参数留为空白,则路由将被限制到任何经过身份验证的用户,无论角色如何。在用户控制器中使用它来限制对“获取所有用户”和“按ID获取用户”路由的访问。...Node.js Auth用户服务 路径:/users/user.service.js 用户服务包含用于验证用户凭据返回JWT令牌的方法,用于在应用程序中获取所有用户的方法以及用于通过id获取单个用户的方法

5.7K10

ASP.NET Core 实战:基于 Jwt Token 的权限控制全揭露

这个项目中,我将使用 Jwt 的方式实现对于用户的权限管控,在本章中,我将演示如何使用 Jwt 实现对于用户的授权、鉴权。   ...  Jwt(json web token),是一种基于 Json 的无状态授权令牌,因为 Jwt 是一种标准的数据传输规范,并不是某家所独有的技术规范,因此非常适用于构建单点登录服务,为 web、client...对于一个系统来说可能会有多种用户角色,每一个用户角色可以访问的资源也是不同的,所以,当用户已经拥有令牌后,我们还需要对用户角色进行鉴定,从而做到对用户进行进一步的权限控制。   ...如果想要深入了解 ASP.NET Core 的授权策略的可以看看园子里这篇文章 =》ASP.NET Core 运行原理解剖[5]:Authentication,或是国外的这篇介绍 ASP.NET Core...通过判断当前登录用户角色是否包含请求的地址,当用户角色并不包含对于访问地址的权限时,返回 403 Forbidden 状态码。

2.1K20

零玩转SpringSecurity+JWT整合前后端分离

创建令牌 解析令牌信息 4.JWT的总结 JWT就是一个加密的带用户信息的字符串,没学习JWT之前,我们在项目中都是返回一个基本的 字符串,然后请求时带上这个字符串,再从session或者...后面的东西还是有点难度的, 如下: 如何读取数据库的用户名和密码 如何对密码加密 如何使用数据的角色和权限 如何配置方法级别的权限访问 如何自定义登陆页面 如何集成 redis 把登陆信息放到 Redis...登录时我们如何接入jwt呢?...header带过来 * 解析jwt * 设置到上下文当中去 * jwt 性能没有session好 * * @param httpServletRequest...token 因为我们设置了过期时间 2小时嘛 欸 访问成功 我们试一试 没有权限的 8.JWT登出 思考: 1.咋记录登录的唯一性呀 思路: 在用户登录成功后进入到handel我们进行记录当前

1.3K20

微服务中的鉴权该怎么做?

设置过期时间,判断用户是否登录时,需要先去 Redis 上查看 JWT 字符串是否存在,存在的话再对 JWT 字符串做解析操作,如果能成功解析,就没问题,如果不能成功解析,就说明令牌不合法。...,就去看下 Redis 上令牌的过期时间,快过期了,就重新设置一下,其他都一模一样。...另一方面自定义权限注解和角色注解,在切面中对这些注解进行解析,检查当前用户是否具备所需要的角色/权限等。...2.2 校验校验是指每一个请求到达的时候,校验用户是否已经登录。这个当然可以和 2.1 放到一起去做,但是松哥不建议。...松哥的做法是定义了一个公共模块,所有的微服务都依赖这个公共模块,这个公共模块中定义了一个拦截器,会拦截下来每一个请求,请求头中取出用户 ID,然后 Redis 中拿到具体的用户信息,存入到 ThreadLocal

72310

微服务解决方案

令牌中的用户信息解析出来,然后存入请求的Header中,这样后续服务就不需要解析JWT令牌了,可以直接请求的Header中获取到用户信息 package cn.gathub.gateway.filter...; import reactor.core.publisher.Mono; /** * 将登录用户JWT转化成用户信息的全局过滤器 * * @author Honghui [wanghonghui_work...中解析用户信息设置到Header中去 String realToken = token.replace("Bearer ", ""); JWSObject jwsObject...令牌 在这里插入图片描述 2、使用获取到的JWT令牌访问需要权限的接口 在这里插入图片描述 3、使用获取到的JWT令牌访问获取当前登录用户信息的接口,访问地址 在这里插入图片描述 4、当token不存在时...image 5、当JWT令牌过期时,使用refresh_token获取新的JWT令牌 在这里插入图片描述 6、使用授码模式登录时,先访问地址获取授权码:undefined localhost:9201

1K00

微服务中的鉴权该怎么做?

设置过期时间,判断用户是否登录时,需要先去 Redis 上查看 JWT 字符串是否存在,存在的话再对 JWT 字符串做解析操作,如果能成功解析,就没问题,如果不能成功解析,就说明令牌不合法。...,就去看下 Redis 上令牌的过期时间,快过期了,就重新设置一下,其他都一模一样。...另一方面自定义权限注解和角色注解,在切面中对这些注解进行解析,检查当前用户是否具备所需要的角色/权限等。...2.2 校验 校验是指每一个请求到达的时候,校验用户是否已经登录。 这个当然可以和 2.1 放到一起去做,但是松哥不建议。...松哥的做法是定义了一个公共模块,所有的微服务都依赖这个公共模块,这个公共模块中定义了一个拦截器,会拦截下来每一个请求,请求头中取出用户 ID,然后 Redis 中拿到具体的用户信息,存入到 ThreadLocal

60710

微服务权限

令牌中的用户信息解析出来,然后存入请求的Header中,这样后续服务就不需要解析JWT令牌了,可以直接请求的Header中获取到用户信息 package cn.gathub.gateway.filter...; import reactor.core.publisher.Mono; /** * 将登录用户JWT转化成用户信息的全局过滤器 * * @author Honghui [wanghonghui_work...中解析用户信息设置到Header中去 String realToken = token.replace("Bearer ", ""); JWSObject jwsObject...令牌 在这里插入图片描述 2、使用获取到的JWT令牌访问需要权限的接口 在这里插入图片描述 3、使用获取到的JWT令牌访问获取当前登录用户信息的接口,访问地址 在这里插入图片描述 4、当token不存在时...image 5、当JWT令牌过期时,使用refresh_token获取新的JWT令牌 在这里插入图片描述 6、使用授码模式登录时,先访问地址获取授权码:undefined localhost:9201

55900

微服务 day18:基于oauth2实现RBAC认证授权、微服务间认证实现

redis 中找到该用户令牌对应的 jwt 令牌。 ? 使用 jwt 的测试程序查看 此令牌的内容。 ? 可以看到 authorities 属性中为用户的权限。...0x03 一些问题 用户前端是如何解密JWT令牌的? 公钥是否会暴露在前端? 五、细粒度授权 0x01 需求分析 什么是细粒度授权?...2、用户请求到达资源服务后,资源服务需要取出header中的jwt令牌解析出用户信息。...解析令牌中的信息 1、JWT解析工具类 1、在 Oauth2Util 工具类中, header 中取出JWT令牌解析 JWT 令牌的内容。...七、提出一些问题 1、JWT时间目前是由 redis 来进行控制,那么 jwt令牌的实际过期时间是多久? 如何获取或者设置? 2、生成JWT的公钥和私钥都有哪些作用?

3.2K11

《ASP.NET Core 微服务实战》-- 读书笔记(第10章)

ASP.NET Core Web 应用安全 本章示例中,我们将主要关注 OpenID Connetc 和 JWT 格式的 Bearer 令牌 OpenID Connect 基础 OpenID Connect...是 OAuth2 的一个超集,它规定了身份提供方(IDP)、用户和应用之间的安全通信的规范和标准 使用 OIDC 保障 ASP.NET Core 应用的安全 作为本章第一个代码清单,我们将使用 OIDC...Core 使用 Cookie 身份验证和 OpenID Connect 身份验证 添加一个 account 控制器,提供的功能包括登录、注销、以及使用一个视图显示用户身份中的所有特征 using Microsoft.AspNetCore.Authentication.Cookies...,用户登录的流程前面已经讨论过,即通过几次浏览器重定向完成网站和 IDP 之间的交互 当网站获取到合法身份后,会向 IDP 申请访问令牌,申请时需要提供身份证令牌以及正在被请求的资源的信息 使用客户端凭证保障服务的安全...令牌保障服务的安全 在服务的 Startup 类型的 Configure 方法中启用配置 JWT Bearer 身份验证 app.UseJwtBearerAuthentication(new JwtBearerOptions

1.8K10

JWT数据格式及实现单点登录原理

JWT的声明一般被用来在身份提供者和服务提供者间传递被认证的用户身份信息,以便于资源服务器获取资源,也可以增加一些额外的其它业务逻辑所必须的声明信息,该token也可直接被用于认证,也可被加密。...通俗来讲,JWT是一个含签名携带用户相关信息的加密串,页面请求校验登录接口时,请求头中携带JWT串到后端服务,后端通过签名加密串匹配校验,保证信息未被篡改。...2、服务器验证通过后,在当前对话(session)里面保存相关数据,比如用户角色登录时间等等。 3、服务器向用户返回一个 session_id,写入用户的 Cookie。...拦截器中校验JWT有效性,并在response中重新设置JWT的新值; 最后在JWT服务端,依赖JWT工具包,在登录方法中,需要在登录校验成功后调用生成JWT方法,生成一个JWT令牌并且设置到response...但是矛盾在于:过期时间设置得太长,用户数据的安全性将大打折扣;过期时间设置得太短,用户就必须每隔一段时间重新登录,以获取新的凭证,这会极大挫伤用户的积极性。

60010
领券