`

Json Web Token身份认证

 
阅读更多

用户身份认证一般有5种方式

  • HTTP Basic authentication
    在发送请求时在HTTP头中加入authentication字段,将用Base64编码的用户名和密码作为值,每次发送请求的时候都要发送用户名和密码,实现比较简单。
  • Cookies
    向后台发送用户名和密码,在用户名和密码通过验证后,保存返回的Cookie作为用户已经登录的凭证,每次请求时附带这个Cookie
  • Signatures
    用户拿到服务器给的私钥,在发送请求前,将整个请求使用私钥来加密,发送的将是一串加密信息,此方式只适用于API
  • One-Time Passwords
    一次一密,每次登录时使用不同的密码,一般由服务端通过邮件将密码发给用户,这种登录方式比较繁琐
  • JSON Web Token
    用户发送按照约定,向服务端发送HeaderPayloadSignature,并包含认证信息(密码),验证通过后服务端返回一个token,之后用户使用该token作为登录凭证,适合于移动端和api

因为前后端分离的缘故,现在的后台多数只提供数据部分,一般使用JSON格式,所以JSON Web Token是比较流行的认证方式。

JWT的认证方式相比其他的认证方式有一下优点:

  • 信息可用HMAC或RSA加密,信息安全性较高
  • 生成的密文短,密文可以包含所有用户信息,认证过期时间或用户权限等自定义信息
  • 适合用于手机应用和单页面应用的身份认证
  • 使用灵活,一旦取得了JWT,可以通过POST方式或添加入HTTP头中发送

JWT结构

JWT包含3个部分

  • Header (头部)
  • Payload (负载)
  • Signature (签名)

Header

1
2
3
4
{
  "alg": "HS256",
  "typ": "JWT"
}

JWT的头部是固定的,alg是算法的意思表示该JWT使用的是何种算法加密。typ字段值是固定的JWT

Payload

1
2
3
4
5
{
  "sub": "1234567890",
  "name": "John Doe",
  "admin": true
}

负载部分就是具体的认证信息,通过修改这部分的内容来控制认证信息如用户权限等。除了一些保留字段exp(过期时间)、audiss等外,使用方法跟普通Json一样。

Signature

签名,也就是密钥,用来保证密文的安全强度

以上3部分都经过Base64Url处理后用.分隔再使用HMAC SHA256RSA加密为一段字符串

1
2
3
4
HMACSHA256(
  base64UrlEncode(header) + "." +
  base64UrlEncode(payload),
  secret)

具体的使用在JWT.IO上有演示

JWT使用流程

jwt diagramjwt diagram

客户端POST用户名和密码到服务端,若对安全要求较高可以是加密后的用户名或密码,服务端把拿到的用户名和密码与数据库中的对比,若相同则按照上面的流程生成JWT,然后返回客户端。在此之后客户端的所有请求,可以在Authorization HTTP头或POST数据中附带得到的JWT。服务端验证JWT并解析出Payload部分,以此来判断用户的权限。

 

JWT的使用方法很简单,就拿node.js的包node-jsonwebtoken来说加密和验证就两个函数jwt.signjwt.verify并且jwt.io中提供了很多语言的JWT包。

分享到:
评论

相关推荐

    JWT(json web token)包

    JWT(json web token)是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准。 JWT的声明一般被用来在身份提供者和服务提供者间传递被认证的用户身份信息,以便于从资源服务器获取资源。比如用在用户登录上...

    JWT-JSON Web Token實作分享1

    JSON Web Token(JWT)是一种基于 token 的身份验证机制,它可以提供一种无状态、可扩展、安全的身份验证方式。下面将详细介绍 JWT 的实现和使用。 为什么需要 Web Token? 在服务器端身份验证中,传统的基于...

    tungsten:JSON Web Token 身份验证 - 使用 expressjs 中间件

    钨JSON Web Token 身份验证 - 使用 expressjs 中间件信息包裹钨描述JSON 网络令牌认证节点版本>= 0.10用法安装 npm install tungsten --save例子钨#session 连接/expressjs 风格的中间件app.use(tungsten.session())...

    php实现JWT(json web token)鉴权实例详解

    JWT是json web token缩写。它将用户信息加密到token里,服务器不保存任何用户信息。服务器通过使用保存的密钥验证token的正确性,只要正确即通过验证。基于token的身份验证可以替代传统的cookie+session身份验证方法...

    asp.net webapi2 基于token令牌的身份验证

    在现代Web应用中,基于Token的身份验证机制已经成为一种流行的安全实践,尤其是OAuth2和JWT(JSON Web Tokens)的广泛应用。本文将深入探讨ASP.NET WebAPI2如何实现基于Token的令牌身份验证。 首先,我们需要理解...

    c# JSON WEB TOKEN JWT.dll

    生成token工具,webapi 接口 token JWT的Web API身份验证Json Web Token(jwt)是一种不错的身份验证及授权方案,简单的说就是调用端调用api时,附带上一个由api端颁发的token,以此来验证调用者的授权信息。

    Json Web Token(JWT)介绍与基本使用详解及完整源码示例

    Json Web Token(JWT)是一种轻量级的身份验证和授权机制,广泛应用于Web应用程序,特别是单页应用(SPA)和微服务架构中。JWT通过在客户端和服务器之间传递JSON编码的信息来实现用户认证,无需在服务器端存储会话...

    djangorestframework-simplejwt:用于 Django REST 框架的 JSON Web Token 身份验证插件

    Django REST Framework SimpleJWT 是一个专门针对 Django REST 框架设计的 JSON Web Token (JWT) 身份验证插件。JWT 是一种安全的身份验证机制,它允许在客户端和服务端之间传输认证信息,而无需在每次请求时发送...

    JWT(json web token加密算法) for C# dll 文件,亲测可用

    JSON Web Token(JWT)是一种开放的标准(RFC 7519),定义了一种紧凑的、自包含的方式来安全地在各方之间传输信息作为一个JSON对象。这个信息可以被验证和信任,因为它是数字签名的。JWT可用于身份验证、授权,以及...

    JWT-Json Web Token-目前最流行跨域身份验证解决方案

    JWT的声明一般被用来在身份提供者和服务提供者间传递被认证的用户身份信息,以便于从资源服务器获取资源,也可以增加一些额外的其它业务逻辑所必须的声明信息,该token也可直接被用于认证,也可被加密。传统的...

    Json Web Token 介绍与基本使用完整源码

    Json Web Token(JWT)是一种轻量级的身份验证和授权机制,广泛应用于Web应用程序,特别是单页应用(SPA)和微服务架构中。JWT通过在客户端和服务器之间传递JSON编码的信息来实现用户认证,无需在服务器端存储会话...

    ASP.NET Core Web API之Token验证

    ASP.NET Core Web API采用Token进行身份验证。 主要技术:ASP.NET Core Web API , JWT , Json web token 包括获取Token,Token验证,生成Token等内容 具体可参考个人文章【ASP.NET Core Web API之Token验证】

    JWT(Json Web Token)Java实现jar

    JSON Web Token(JWT)是一种广泛使用的轻量级身份验证和授权机制,主要应用于Web应用程序和服务之间的安全通信。JWT通过在客户端和服务器之间传递令牌来携带信息,这些信息经过签名,可以确保数据的完整性和不可...

    WebApi 使用TOKEN+签名验证

    "WebApi使用TOKEN+签名验证"是一种常见的安全策略,它结合了令牌(Token)验证和签名机制,以确保只有授权的客户端能够访问服务。下面将详细介绍这两种方法及其在实际应用中的实现。 1. **令牌(Token)验证**: ...

    spring boot+vue+websocket带token身份认证推送消息实现

    认证成功后,服务器端生成一个令牌(token),例如JWT(JSON Web Token),返回给客户端。客户端在后续的WebSocket连接请求中将此token附加在HTTP头部中,服务器端接收token并验证合法性。 ```java // 在WebSocket...

    WebApi Token+ 数字签名认证源码

    WebApi Token+ 数字签名认证源码是一种常见的安全机制,用于保护Web API接口免受未经授权的访问。在本文中,我们将深入探讨这个主题,重点介绍C# WebAPI中使用Token和数字签名认证的关键概念和实现步骤。 首先,让...

    Json web token

    JSON Web Token(JWT)是一种开放的标准(RFC 7519),定义了一种紧凑的、自包含的方式来安全地在各方之间传输信息作为一个JSON对象。这个信息可以被验证和信任,因为它是数字签名的。JWT被广泛用于认证和授权场景,...

    .Net WebAPi JWT身份验证

    JSON Web Token(JWT)是一种轻量级的身份验证和授权机制,被广泛应用于API访问控制。本文将深入探讨如何在.NET Framework 4.6.2的WebAPI项目中实现JWT身份验证。 首先,理解JWT的基础概念。JWT是一个自包含的令牌...

    webapi token验证例子

    Token验证通常使用JSON Web Tokens (JWT) 或 OAuth2 协议来实现,这两种方法都是现代Web服务中广泛采用的安全实践。 首先,我们需要理解什么是Token。Token可以被视为一种轻量级的安全令牌,它包含了用户的身份信息...

    angular-auth-example:使用 Angular 路由和 JSON Web Token 的身份验证实现

    角度验证示例使用 Angular 路由和 JSON Web Token 的身份验证实现构建步骤克隆此存储库并导航到终端中的目录在全局安装 npm 和 gulp 安装吞下默认值转到 用户名:testuser,密码:p

Global site tag (gtag.js) - Google Analytics