一、HTTP基本认证

Basic Authentication——当浏览器访问使用基本认证的网站的时候, 浏览器会提示你输入用户名和密码。

http auth的过程:

  • · 客户端发送http请求
  • · 服务器发现配置了http auth,于是检查request里面有没有"Authorization"的http header
  • · 如果有,则判断Authorization里面的内容是否在用户列表里面,Authorization header的典型数据为"Authorization: Basic jdhaHY0=",其中Basic表示基础认证, jdhaHY0=是base64编码的"user:passwd"字符串。
  • · 如果没有,或者用户密码不对,则返回http code 401页面给客户端
  • · 标准的http浏览器在收到401页面之后,应该弹出一个对话框让用户输入帐号密码;并在用户点确认的时候再次发出请求,这次请求里面将带上Authorization header

一次典型的访问场景是:

  • · 浏览器发送http请求(没有Authorization header)
  • · 服务器端返回401页面
  • · 浏览器弹出认证对话框
  • · 用户输入帐号密码,并点确认
  • · 浏览器再次发出http请求(带着Authorization header)
  • · 服务器端认证通过,并返回页面
  • · 浏览器显示页面

项目举例

wordpress api 创建文章,返回401.

1、安装鉴权插件Application Passwords

admin登录——工具——上传插件(.zip)

用户——详情——Application Passwords——创建用户名(即该用户的名称)生成密码,记得保存下来。

2、xshell连接服务器

输入命令

echo -n "test001:123456" | base64

3、打开jmeter

Ctrl+0:线程组(作者)

Ctrl+1:HTTP请求(创建文章)

添加配置文件——HTTP Headers Manager

添加参数

Authorization:Basic空格Authorization

运行脚本,成功。

二、JWT鉴权

JWT是一种token based auth的标准。

其工作流程是这样的

  1. 用户使用用户名和密码进行鉴权
  2. 服务端进行鉴权
  3. 服务端给客户端分配一个加密的token
  4. 客户端保存这个token,以后的每个请求,客户端都会发送这个token
  5. 服务端通过token判断是否是鉴权过的用户,并返回请求的响应数据

JWT的特点

  • 简洁:可以通过URL,POST参数或者在HTTP header发送,因为数据量小,传输速度也很快
  • 自包含:payload中包含了所有用户所需要的信息,避免了多次查询数据库

JWT的应用场景

  • 身份认证
  • 安全要求的信息交换

JWT的结构

JWT包含了使用.分隔的三部分:

  • Header 头部:Base64Url(token类型+加密算法)
  • Payload 负载:Base64Url(用户信息)
  • Signature 签名:算法(  base64UrlEncode(header) + "." +  base64UrlEncode(payload),  密钥)

其结构看起来是这样的

xxxxx.yyyyy.zzzzz

签名用于验证消息的发送者以及消息是没有经过篡改的。如果黑客获取到了payload中的用户信息,并进行了篡改,那么经过Base64编码后也会发生变化,而签名是根据Header和Payload共同决定的,签名也会不一样,服务器就会判断出不一致。

下列的JWT展示了一个完整的JWT格式,它拼接了之前的Header, Payload以及秘钥签名:

如何使用JWT?

1)用户在客户端输入用户名和密码登录服务器;

2)服务器认证通过后,返回给用户一个JWT

3)客户端只需要本地保存该token(通常使用local storage,也可以使用cookie)即可。

4)当用户下次访问时,在Authorization头部使用Bearer模式添加JWT,格式Authorization: Bearer <token>

5)服务端检查请求头Authorization中的JWT信息,如果合法,则允许用户的行为。

由于JWT是自包含的,因此减少了需要查询数据库的需要。

HTTP基本认证和JWT鉴权的更多相关文章

  1. JWT对SpringCloud进行系统认证和服务鉴权

    JWT对SpringCloud进行系统认证和服务鉴权 一.为什么要使用jwt?在微服务架构下的服务基本都是无状态的,传统的使用session的方式不再适用,如果使用的话需要做同步session机制,所 ...

  2. 【Spring Cloud & Alibaba 实战 | 总结篇】Spring Cloud Gateway + Spring Security OAuth2 + JWT 实现微服务统一认证授权和鉴权

    一. 前言 hi,大家好~ 好久没更文了,期间主要致力于项目的功能升级和问题修复中,经过一年时间的打磨,[有来]终于迎来v2.0版本,相较于v1.x版本主要完善了OAuth2认证授权.鉴权的逻辑,结合 ...

  3. Spring Boot 鉴权之—— JWT 鉴权

    第一:什么是JWT鉴权 1. JWT即JSON Web Tokens,是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准((RFC 7519),他可以用来安全的传递信息,因为传递的信息是 ...

  4. JWT鉴权

    一.HTTP基本认证 Basic Authentication--当浏览器访问使用基本认证的网站的时候, 浏览器会提示你输入用户名和密码. http auth的过程: 客户端发送http请求 服务器发 ...

  5. jwt鉴权学习 (php示例代码)

    前段时间听朋友讲起 jwt鉴权,博主我是一脸懵逼,通过朋友坚持不懈的讲解,我终于听懂了,jwt就是登陆token校验嘛 然而事情并不是博主想象的那么简单,在一个艳阳高照,晴空万里的夜晚,博主手贱百度了 ...

  6. springboot oauth 鉴权之——password鉴权相当于jwt鉴权模式

    近期一直在研究鉴权方面的各种案例,这几天有空,写一波总结及经验. 第一步:什么是 OAuth鉴权 OAuth2是工业标准的授权协议.OAuth2取代了在2006创建的原始OAuthTM协议所做的工作. ...

  7. [Kong] basic-auth基本认证及ACL鉴权

    目录 basic-auth 1. Route上启用插件 2. 创建一个Consumer 3. 为Consumer创建凭证 4. 验证凭证 ACL 用户鉴权 1. 在route上启用ACL鉴权插件 2. ...

  8. 通俗化讲解JWT鉴权的使用场景及结构安全

    一.基于Session的应用开发的缺陷 在我们传统的B\S应用开发方式中,都是使用session进行状态管理的,比如说:保存登录.用户.权限等状态信息.这种方式的原理大致如下: 用户登陆之后,将状态信 ...

  9. shiro jwt 构建无状态分布式鉴权体系

    一:JWT 1.令牌构造 JWT(json web token)是可在网络上传输的用于声明某种主张的令牌(token),以JSON 对象为载体的轻量级开放标准(RFC 7519). 一个JWT令牌的定 ...

随机推荐

  1. du 命令 -目前的目录所占的磁盘空间

    Linux du命令也是查看使用空间的,但是与df命令不同的是Linux du命令是对文件和目录磁盘使用的空间的查看,还是和df命令有一些区别的. 1.命令格式: du [选项][文件] 2.命令功能 ...

  2. ruby 异常处理

    begin raise 'A test exception.' rescue Exception => e puts e.message puts e.backtrace.inspect end

  3. rails 自定义校验及validates_each多校验

    一.自定义校验 使用 validate 方法传入一个同名方法的 Symbol 即可. validate :my_validation private def my_validation if name ...

  4. paramiko分开执行多条命令 不像之前一样使用\n

    #!/usr/bin/env python#-*- encoding -*- import paramiko transport = paramiko.Transport(('192.168.11.1 ...

  5. Eclipse中如何开启断言(Assert),方法有二

    Eclipse中如何开启断言(Assert),方法有二:1.Run -> Run Configurations -> Arguments页签 -> VM arguments文本框中加 ...

  6. structs2----数据封装以及拦截器

    技术分析之在Struts2框架中使用Servlet的API 1. 在Action类中也可以获取到Servlet一些常用的API * 需求:提供JSP的表单页面的数据,在Action中使用Servlet ...

  7. JS中的数组排序函数sort()

    JavaScript实现多维数组.对象数组排序,其实用的就是原生的sort()方法,用于对数组的元素进行排序. sort() 方法用于对数组的元素进行排序.语法如下: arrayObject.sort ...

  8. Visual Studio Command Prompt 工具配置方法

    有时候,我们无法找到Visual Studio Command Prompt,需要手动配置 打开 Visual studio2015,选择  "工具"—>"外部工具 ...

  9. 624. Maximum Distance in Arrays二重数组中的最大差值距离

    [抄题]: Given m arrays, and each array is sorted in ascending order. Now you can pick up two integers ...

  10. c# json.net xml互转

    json转xml: XmlDocument doc = (XmlDocument)JsonConvert.DeserializeXmlNode(jsonText,"root"); ...