微服务和云原生架构实践-JWT简介

什么是JWT

        JSON Web Token(JWT)是RFC 7519定义的⼀个开放标准,它定义了⼀种紧凑和⾃ 包含的JSON对象格式,通过它可以在多个实体间安全地传输信息。信息经过签 名,可信任和可校验。主要⽤于认证/SSO和信息交换。 签名⽅式 HMAC~secret RSA ~ public/private key

类⽐签名⽀票

两种令牌类型

透明令牌

  • By Reference Token
  • 随机字符串,⽆法猜测,严格服务器集中校验

⾃包含令牌 

  • By Value Token
  • 可以包含⽤户元数据或者声明(claims),⽆状态校验
  • JSON Web Token(JWT)

JWT令牌结构 

JWT令牌结构

流程HMAC

流程RSA

流程RSA是用的密钥对来认证的

 

JWT优劣

优点:

  • CORS
  • 不需要CSRF保护
  • 易于和Mobile集成
  • ⽆状态校验
    • 不需要分布式会话存储
    • 减少授权服务器压⼒

不⾜:

  • 信息公开可见
  • 易于受XSS攻击
  • 可能包含过期授权信息
  • 令牌⼤⼩随信息量增长
  • ⽆状态和吊销互斥

因为不需要cookie所以不牵扯到跨域CORS

JWT无状态不需要集中式分布式缓存,减少了授权服务器的压力

只要拿到了串就能界面信息,就可以用base64解析出来

无状态吊销不及时,还在有效期内,吊销了不及时。如果是透明令牌+集中式校验的方式就可以

已标记关键词 清除标记
<div class="post-text" itemprop="text"> <p><strong>Question</strong></p> <p>Question how is it possible to create an authentication service within a micro-service application and have other services check against that token (JWT) and retrieve a user?</p> <p><strong>Possible Solution</strong></p> <p>My current thinking is based around the auth service inserting <code>{ token, user }</code> into Redis once a user is authenticated. All other service can check against the user's <code>Authorization: Bearer kdI8$dj$nD&...</code> header token within Redis. </p> <ul> <li>If <code>token</code> is present in Redis, user is authenticated.</li> <li>If <code>token</code> is not present in Redis, user is not authenticated.</li> </ul> <p><a href="https://i.stack.imgur.com/7fsl7.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/7fsl7.png" alt="enter image description here"></a></p> <ol> <li>User sends <code>{ username, password }</code> to auth service</li> <li>Auth service authenticates credentials and retrieves <code>{ token, user }</code></li> <li>Auth service inserts <code>{ token, user }</code> into Redis</li> <li>User makes request to <code>Service-1</code> with <code>{ token }</code></li> <li><code>Service-1</code> loooks for <code>{ token }</code> in Redis and retrieves <code>{ token, user }</code></li> <li><code>Service-1</code> does its thing and sends back <code>{ data }</code></li> </ol> <p>Are there any possible security, logic or architectural problems with this approach? </p> </div>
©️2020 CSDN 皮肤主题: 深蓝海洋 设计师:CSDN官方博客 返回首页
实付 19.90元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值