添加身份认证和鉴权方案-使用jwtbearer
HTTP身份认证框架
RFC 7235 定义了一个 HTTP 身份验证框架,服务器可以用来质询(challenge)客户端的请求,客户端则可以提供身份验证凭据。
服务端开启了身份认证后。如果客户端访问未授权的接口,服务器端会向客户端返回 401(Unauthorized,未被授权的)响应状态码,并在 WWW-Authenticate 响应标头提供如何进行验证的信息,其中至少包含有一种质询方式。
标头的语法如下
WWW-Authenticate: <type> realm=<realm>
在这里,<type> 指的是验证的方案(“Basic”是最常见的验证方案)。realm 用来描述进行保护的区域,或者指代保护的范围(相当于一个角色)
要正常访问,就要添加身份认证标头
Authorization: <type> <credentials>
<type>指的是身份认证框架使用的身份认证方案,比如basic 参见 RFC 7617,base64 编码凭据。“Basic”HTTP 验证方案是在 RFC 7617 中规定的,在该方案中,使用用户的 ID/密码作为凭据信息,并且使用 base64 算法进行编码,以明文的形式在网络中进行传输的。
<credentials>如果是basic验证,在前端就用js生成就行,如果是bearer,一般是请求后端的登录接口获取,或者是问后端人员要一个。
Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==
在这个示例中,QWxhZGRpbjpvcGVuIHNlc2FtZQ== 是用户名和密码经过 Base64 编码后的结果。这个字符串的解码结果是 Aladdin:open sesame。Aladdin是用户名,open sesame是密码。
bearer 参见 RFC 6750,bearer 令牌通过 OAuth 2.0 保护资源
Authorization: bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VybmFtZSI6Ind3dy5iZWpzb24uY29tIiwic3ViIjoiZGVtbyIsImlhdCI6MTcxNDQ0NjQ0MiwibmJmIjoxNzE0NDQ2NDQyLCJleHAiOjE3MTQ1MzI4NDJ9.8bg2jMRwkbSoEkLZrjoko4zREFjxmkHPOrTCdTkOwK8
这个例子解密如下

如果没有该标头的话,会报401错误,并提示你应该使用的身份认证方案

web主机配置身份认证
web主机中配置
1 builder.Services.AddAuthentication(option =>
2 {
3 //添加一个使用 JwtBearer 身份验证作为默认的身份验证方案,不是这里开启了身份认证
4 option.DefaultAuthenticateScheme= JwtBearerDefaults.AuthenticationScheme;
5 option.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
6 }).AddJwtBearer(option =>
7 {
8 option.TokenValidationParameters = new Microsoft.IdentityModel.Tokens.TokenValidationParameters
9 {
10 ValidIssuer = "颁发机构",
11 ValidAudience = "申请者",
12 //ValidateLifetime=true,//验证失效时间,默认就是true
13 ClockSkew=TimeSpan.FromSeconds(0),//将token的失效时间延长,默认是5分钟
14 IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("1234567890123456颁发者数字签名"))//最小16位
15 };
16 });
17 //添加授权策略,不指定策略,使用默认策略时,可注释
18 //builder.Services.AddAuthorization(option =>
19 //{
20 // // 这里可以定义多个策略
21 // //option.AddPolicy("DefaultPolicy", policy =>
22 // //{
23 // // policy.RequireAuthenticatedUser();// 要求用户认证
24 // //});
25 //});
26 builder.Services.AddControllers(option =>
27 {
28 //给控制器应用授权策略(过时的方式,现在推荐使用端点路由授权)
29 //option.Filters.Add(new AuthorizeFilter());
30 });
31
32 var app = builder.Build();
33
34 //开启身份验证。对于授权不是必须的,如果不使用HttpContext.User,可注释。如果验证成功,处理程序将创建一个表示用户身份的ClaimsPrincipal对象,并将其设置为当前HTTP上下文的用户(HttpContext.User),否则返回401
35 //app.UseAuthentication();
36 //开启授权。必须在身份验证之后。启用授权组件[Authorize]。但是对于使用过滤器的方式授权,此中间件不需要也可以
37 app.UseAuthorization();
38 //推荐使用的全局授权方式。使用请求端点路由的方式授权,不指定具体授权策略时会使用默认策略
39 app.MapControllers().RequireAuthorization();
40
41 app.Run();
Authorization表头需要的token生成
1 Claim[] claim = new Claim[] {
2 new Claim(ClaimTypes.Name,"zzz"),
3 new Claim("testdepart","testdepart"),
4 new Claim("自定义字段","testdepart")
5 };
6 var token = new JwtSecurityToken(
7 issuer: "颁发机构",
8 audience: "申请者",
9 claims: claim,
10 notBefore: DateTime.Now,
11 expires: DateTime.Now.AddMinutes(1),
12 signingCredentials: new SigningCredentials(new SymmetricSecurityKey(Encoding.UTF8.GetBytes("1234567890123456颁发者数字签名")), SecurityAlgorithms.HmacSha256));
13 string jwttoken=new JwtSecurityTokenHandler().WriteToken(token);
注意的事项:身份验证和授权在前端请求看来是一件事,就是添加一个Authorization标头,但对于后端web主机是两件事,不一定要全部都做。
添加身份认证和鉴权方案-使用jwtbearer的更多相关文章
- spring boot / cloud (十四) 微服务间远程服务调用的认证和鉴权的思考和设计,以及restFul风格的url匹配拦截方法
spring boot / cloud (十四) 微服务间远程服务调用的认证和鉴权的思考和设计,以及restFul风格的url匹配拦截方法 前言 本篇接着<spring boot / cloud ...
- ASP.NET Core 项目简单实现身份验证及鉴权
ASP.NET Core 身份验证及鉴权 目录 项目准备 身份验证 定义基本类型和接口 编写验证处理器 实现用户身份验证 权限鉴定 思路 编写过滤器类及相关接口 实现属性注入 实现用户权限鉴定 测试 ...
- Tomcat 容器的安全认证和鉴权
大量的 Web 应用都有安全相关的需求,正因如此,Servlet 规范建议容器要有满足这些需求的机制和基础设施,所以容器要对以下安全特性予以支持: 身份验证:验证授权用户的用户名和密码 资源访问控制: ...
- 深入理解k8s中的访问控制(认证、鉴权、审计)流程
Kubernetes自身并没有用户管理能力,无法像操作Pod一样,通过API的方式创建/删除一个用户实例,也无法在etcd中找到用户对应的存储对象. 在Kubernetes的访问控制流程中,用户模型是 ...
- shiro,基于springboot,基于前后端分离,从登录认证到鉴权,从入门到放弃
这个demo是基于springboot项目的. 名词介绍: ShiroShiro 主要分为 安全认证 和 接口授权 两个部分,其中的核心组件为 Subject. SecurityManager. Re ...
- web系统认证与鉴权中的一些问题
认证鉴权系统的初心: 空间管理: 1.他是谁? 他登陆了没有? 2.他要做什么? 2.1 他要使用什么功能? 他是否有这个功能的权限. 2.2 他要使用这个功能做什么操作? 他是否有这个功能的这个操作 ...
- Java架构笔记:用JWT对SpringCloud进行认证和鉴权
写在前面 喜欢的朋友可以关注下专栏:Java架构技术进阶.里面有大量batj面试题集锦,还有各种技术分享,如有好文章也欢迎投稿哦. image.png JWT(JSON WEB TOKEN)是基于RF ...
- 【Python】Django用户、认证、鉴权模块使用
此文是总结Django官方网站里面的Document的文章 User authentication in Django http://www.djangoproject.com/documentati ...
- 白话OAuth2用户认证及鉴权标准流程
一.OAuth2需求场景 在说明OAuth2需求及使用场景之前,需要先介绍一下OAuth2授权流程中的各种角色: 资源拥有者(User) - 指应用的用户 认证服务器 (Authorization S ...
- 认证鉴权与API权限控制在微服务架构中的设计与实现(四)
引言: 本文系<认证鉴权与API权限控制在微服务架构中的设计与实现>系列的完结篇,前面三篇已经将认证鉴权与API权限控制的流程和主要细节讲解完.本文比较长,对这个系列进行收尾,主要内容包括 ...
随机推荐
- Java实现打包压缩文件或文件夹生成zip以实现多文件批量下载
有时候在系统中需要一次性下载多个文件,但逐个下载文件比较麻烦.这时候,最好的解决办法是将所有文件打包成一个压缩文件,然后下载这个压缩文件,这样就可以一次性获取所有所需的文件了. 下面是一个名为Comp ...
- HDC2021技术分论坛:分布式软时钟有多重要?
作者:lishijun,HarmonyOS解决方案首席技术专家&软总线首席架构师 分布式软总线是HarmonyOS的关键根技术之一,也是众多开发者们非常关注的一项技术.通过分布式软总线,可以将 ...
- 第十八篇:Django进级
一.Django工程创建 二.Django 的 CBV和FBV 三.模板语言循环字典 四.Django基于正则表达式的URL 五.Django对应的路由名称 六.Django路由分发 七.Django ...
- 2024-04-13:用go语言,给定一个整数数组 `nums`, 请编写一个函数,返回一个新的数组 `counts`。 满足以下条件:对于每个 `nums[i]`, `counts[i]` 表示在
2024-04-13:用go语言,给定一个整数数组 nums, 请编写一个函数,返回一个新的数组 counts. 满足以下条件:对于每个 nums[i], counts[i] 表示在 nums[i] ...
- 重新整理 .net core 实践篇—————grpc工具[三十四]
前言 简单整理一下grpc工具. 正文 工具核心包: Grpc.Tools 这个是项目要引用的包,用来生成cs代码的. dotnet-grpc 这个就是cli,命令行工具 dotnet-grpc 核心 ...
- spring cloud 学习笔记 客户端(本地)均衡负载(三)
前言 在微服务中,一个服务可能即是服务端也是客户端,当别的服务调用该服务的时候这个服务就是服务端,当这个服务主动调用另外一个服务的时候,那么就是服务端. 作为客户端通过服务注册与发现获取某个服务的注册 ...
- async/await 贴脸输出,这次你总该明白了
出来混总是要还的 最近在准备记录一个.NET Go核心能力的深度对比, 关于.NET/Go的异步实现总感觉没敲到点上. async/await是.NET界老生常谈的话题,每至于此,状态机又是必聊的话题 ...
- 力扣1077(MySQL)-项目员工Ⅲ(中等)
题目: 写 一个 SQL 查询语句,报告在每一个项目中经验最丰富的雇员是谁.如果出现经验年数相同的情况,请报告所有具有最大经验年数的员工. 查询结果格式在以下示例中: employee_id 为 1 ...
- 力扣745(java&python)-达到终点数字(中等)
题目: 在一根无限长的数轴上,你站在0的位置.终点在target的位置. 你可以做一些数量的移动 numMoves : 每次你可以选择向左或向右移动.第 i 次移动(从 i == 1 开始,到 i ...
- 鸿蒙HarmonyOS实战-ArkUI动画(放大缩小视图)
前言 在HarmonyOS中,可以通过以下方法放大缩小视图: 使用缩放手势:可以使用双指捏合手势来放大缩小视图.将两个手指放在屏幕上,并向内或向外移动手指,即可进行放大或缩小操作. 使用系统提供的缩放 ...