写点什么

HTTP 服务的 4 种认证方法分析

作者:前行
  • 2023-09-23
    广东
  • 本文字数:1012 字

    阅读完需:约 3 分钟

4 种认证方法

Basic

Digest

OAuth

Bearer


其中 OAuth、Bearer 是在企业级认证系统中常用的方案,所以这里重点介绍这 2 种

OAuth

OAuth(开放授权)是一个开放的授权标准 RFC7519,允许用户让第三方应用访问该用户在某一 Web 服务上存储的私密资源(例如照片、视频、音频等),而无需将用户名和密码提供给第三方应用。


最新的版本是 OAuth 2.0,可以参考阮一峰写的 理解OAuth 2.0

Bearer

Bearer 认证,也称为令牌认证,是一种 HTTP 身份验证方法,最流行的 token 编码方式是 JSON Web Token(JWT)

基于 JWT 的 Token 认证机制

什么是 JWT?

JWT 是 Bearer Token 的一个具体实现,由 JSON 数据格式组成,通过 HASH 散列算法生成一个字符串。该字符串可以用来进行授权和信息交换。

原理

1)客户端使用用户名和密码请求登录


2)服务端收到请求后,会去验证用户名和密码。如果用户名和密码跟数据库记录不一致,则验证失败;如果一致则验证通过,服务端会签发一个 Token 返回给客户端


3)客户端收到请求后会将 Token 缓存起来,比如放在浏览器 Cookie 中或者 LocalStorage 中,之后每次请求都会携带该 Token。


4)服务端收到请求后,会验证请求中的 Token,验证通过则进行业务逻辑处理,处理完后返回处理后的结果。

JWT 格式

分为 Header(头部)、Payload(载荷)、Signature(签名)3 个部分


Header


JWT 的头部承载两个信息:


  • 声明类型,这里是 JWT

  • 声明加密的算法


一个典型示例如下


{    "alg": "HS256",    "kid": "XhbY3aCrfjdYcP1OFJRu9xcno8JzSbUIvGE2",    "typ": "JWT"}
复制代码


Payload(载荷)


载荷就是存放有效信息的地方。定义细节如下:


1)JWT 标准中注册的声明(可选)


2)公共的声明


可以添加任何的需要的信息,一般添加用户的相关信息或其他业务需要的信息,注意不要添加敏感信息


3)私有的声明


客户端和服务端所共同定义的声明,因为 base64 是对称解密的,所以一般不建议存放敏感信息。


一个典型示例如下


{  "sub": "1234567890",  "name": "John Doe"}
复制代码


Signature(签名)


原理如下


1)将 Header 和 Payload 分别 base64 编码后,用 . 连接。


2)使用 Header 中声明的加密方式,利用 secretKey 对连接后的字符串进行加密,加密后的字符串即为最终的 Signature


3)secretKey 是密钥,密钥一定不能泄露。密钥泄露后,入侵者可以使用该密钥来签发 JWT Token,从而入侵系统。

See Also

  1. https://help.aliyun.com/zh/api-gateway/user-guide/jwt-based-authentication?spm=a2c4g.11186623.0.0.19c1588bzDaz5O#75f840d8


发布于: 刚刚阅读数: 4
用户头像

前行

关注

还未添加个人签名 2018-09-06 加入

还未添加个人简介

评论

发布
暂无评论
HTTP 服务的4种认证方法分析_Token_前行_InfoQ写作社区