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的更多相关文章

  1. spring boot / cloud (十四) 微服务间远程服务调用的认证和鉴权的思考和设计,以及restFul风格的url匹配拦截方法

    spring boot / cloud (十四) 微服务间远程服务调用的认证和鉴权的思考和设计,以及restFul风格的url匹配拦截方法 前言 本篇接着<spring boot / cloud ...

  2. ASP.NET Core 项目简单实现身份验证及鉴权

    ASP.NET Core 身份验证及鉴权 目录 项目准备 身份验证 定义基本类型和接口 编写验证处理器 实现用户身份验证 权限鉴定 思路 编写过滤器类及相关接口 实现属性注入 实现用户权限鉴定 测试 ...

  3. Tomcat 容器的安全认证和鉴权

    大量的 Web 应用都有安全相关的需求,正因如此,Servlet 规范建议容器要有满足这些需求的机制和基础设施,所以容器要对以下安全特性予以支持: 身份验证:验证授权用户的用户名和密码 资源访问控制: ...

  4. 深入理解k8s中的访问控制(认证、鉴权、审计)流程

    Kubernetes自身并没有用户管理能力,无法像操作Pod一样,通过API的方式创建/删除一个用户实例,也无法在etcd中找到用户对应的存储对象. 在Kubernetes的访问控制流程中,用户模型是 ...

  5. shiro,基于springboot,基于前后端分离,从登录认证到鉴权,从入门到放弃

    这个demo是基于springboot项目的. 名词介绍: ShiroShiro 主要分为 安全认证 和 接口授权 两个部分,其中的核心组件为 Subject. SecurityManager. Re ...

  6. web系统认证与鉴权中的一些问题

    认证鉴权系统的初心: 空间管理: 1.他是谁? 他登陆了没有? 2.他要做什么? 2.1 他要使用什么功能? 他是否有这个功能的权限. 2.2 他要使用这个功能做什么操作? 他是否有这个功能的这个操作 ...

  7. Java架构笔记:用JWT对SpringCloud进行认证和鉴权

    写在前面 喜欢的朋友可以关注下专栏:Java架构技术进阶.里面有大量batj面试题集锦,还有各种技术分享,如有好文章也欢迎投稿哦. image.png JWT(JSON WEB TOKEN)是基于RF ...

  8. 【Python】Django用户、认证、鉴权模块使用

    此文是总结Django官方网站里面的Document的文章 User authentication in Django http://www.djangoproject.com/documentati ...

  9. 白话OAuth2用户认证及鉴权标准流程

    一.OAuth2需求场景 在说明OAuth2需求及使用场景之前,需要先介绍一下OAuth2授权流程中的各种角色: 资源拥有者(User) - 指应用的用户 认证服务器 (Authorization S ...

  10. 认证鉴权与API权限控制在微服务架构中的设计与实现(四)

    引言: 本文系<认证鉴权与API权限控制在微服务架构中的设计与实现>系列的完结篇,前面三篇已经将认证鉴权与API权限控制的流程和主要细节讲解完.本文比较长,对这个系列进行收尾,主要内容包括 ...

随机推荐

  1. mysql统计查询和索引练习

    课程数据表course SET NAMES utf8mb4; SET FOREIGN_KEY_CHECKS = 0; -- ---------------------------- -- Table ...

  2. ArkUI开发趣味体验,快来抽取限量HarmonyOS专属头像!

    本次ArkUI开发趣味体验活动,将手把手教大家如何在IDE里实操一个ArkUI程序,通过补充缺失代码,成功运行程序开启抽奖功能,抽取个人专属头像,做HarmonyOS第一批数字藏品家! 同时本期提供的 ...

  3. 动态规划(五)——坐标dp

    传纸条 题目描述 小渊和小轩是好朋友也是同班同学,他们在一起总有谈不完的话题.一次素质拓展活动中,班上同学安排做成一个m行n列的矩阵, 而小渊和小轩被安排在矩阵对角线的两端,因此,他们就无法直接交谈了 ...

  4. 重启React Native老项目的奇幻之旅:填坑实录与解决方案分享

    这两天为了重启五年前基于 React Native(版本 0.59.9)开发的老项目,经过各种填坑查询等操作,最终把它成功地运行起来了. 在这篇文章中,我将详述那些遭遇的挑战以及对应的解决方案,以期为 ...

  5. 《最新出炉》系列初窥篇-Python+Playwright自动化测试-38-如何截图-下篇

    1.简介 这个系列的文章也讲解和分享了差不多三分之一吧,突然有小伙伴或者童鞋们问道playwright有没有截图的方法.答案当然是:肯定有的.宏哥回过头来看看确实这个非常基础的知识点还没有讲解和分享. ...

  6. watch对比computed

    总结:      computed和watch之间的区别:             1.computed能完成的功能,Watch都可以实现             2.watch能完成的功能,comp ...

  7. 力扣61(java&python)-旋转链表(中等)

    题目: 给你一个链表的头节点 head ,旋转链表,将链表每个节点向右移动 k 个位置. 示例1: 输入:head = [1,2,3,4,5], k = 2 输出:[4,5,1,2,3] 示例2: 输 ...

  8. K8s 网关选型初判:Nginx 还是 Envoy?

    简介: 本文将从性能和成本.可靠性.安全性 3 方面,对两大开源实现进行比对,希望对正在做 K8s 网关选型的企业有所借鉴. 作者:张添翼(澄潭) 为了避免混淆,我们先对一些关键定义做一些厘清: 传统 ...

  9. ZooKeeper 在阿里巴巴的服务形态演进

    简介: 本文将给大家介绍下 ZooKeeper 的最佳实践场景,归为了 3 类,分别是:微服务领域,代表的集成产品是 Dubbo/SpringCloud:大数据领域,代表的集成产品是 Flink/Hb ...

  10. MaxCompute 公共云多租户设计的技术要点详解及产品实现特色

    ​简介:公共云大数据平台在多租户的设计和实现方式上有所差异.本文主要介绍在公共云大数据平台的多租实现方案中需要考虑的问题和挑战,重点介绍了MaxCompute在计算和存储多租实现上的特点.期望通过这些 ...