Spring Cloud OAuth2 + JWT

Spring Cloud OAuth2 +JWT


前言

提示:这里可以添加本文要记录的大概内容:
例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。


提示:以下是本篇文章正文内容,下面案例可供参考

一、微服务架构下统⼀认证思路

1.1 基于Session的认证⽅式

服务端生成用户相关的数据保存在session(当前会话中),发送给客户端session_id存放的cookie中,这样用户客户端请求带上session_id就可以验证服务器端是否存在session数据,以完成用户的合法校验,当用户退出系统session过期销毁时,客户端的session_id也就无效。加粗样式
在这里插入图片描述

1.2 基于token的认证⽅式

它的交互流程是用户认证成功后服务端生成一个token发给客户端,客户端存储token,每次请求带上token,服务端收到token通过验证后即可验证用户身份。
在这里插入图片描述

3.两种方式对比

服务端要存储session信息需要占用内存资源,客户端需要支持cookie;基于token的方式一般不需要服务端存储token,并且不限制客户端的存储方式。

示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。

二、OAuth2开放授权协议/标准

2.1 OAuth2

OAuth2是一个开放授权协议,允许用户授权第三方应用访问他们存储在另外的服务提供者上的信息,不需要将用户名和密码提供给第三方应用或分享他们的所有内容。
用户:我们自己
第三方应用:什么网站等
另外服务提供者:QQ、微信

2.2 OAuth2协议角色和流程

使用QQ登录这些功能时候需要提前到QQ平台进行登记的

  1. 什么网站、app–登记----->QQ平台
  2. QQ平台会颁发一些参数给网站,后续进行授权登录时需要携带这些参数
    1.client_id :客户端id(QQ最终相当于⼀个认证授权服务器,拉勾⽹就相当于⼀个客户端了,所以会给⼀个客户端id),相当于账号
    2.secret:相当于密码
    在这里插入图片描述
    资源所有者(Resource Owner):可以理解为⽤户⾃⼰
    客户端(Client):我们想登陆的⽹站或应⽤,⽐如拉勾⽹
    认证服务器(Authorization Server):可以理解为微信或者QQ
    资源服务器(Resource Server):可以理解为微信或者QQ

2.3 什么情况下使用OAuth2

  1. 第三方授权登录:微信授权登录、QQ授权登录、微博授权登录等,这是典型的 OAuth2 使⽤场景。
  2. 单点登录的场景:如果项⽬中有很多微服务或者公司内部有很多服务,可以专⻔做⼀个认证中⼼(充当认证平台⻆⾊),所有的服务都要到这个认证中⼼做认证,只做⼀次登录,就可以在多个授权范围内的服务中⾃由串⾏。

2.4 OAuth2颁发Token授权方式

(1)授权码(authorzation-code)

授权码模式使用了回调地址,最复杂的授权方式
在这里插入图片描述
(1)资源拥有者打开客户端,客户端要求资源拥有者给予授权,它将浏览器被重定向到授权服务器,重定向时会附加客户端的身份信息。

/uaa/oauth/authorize? 
client_id=p2pweb&response_type=code&scope=app&redirect_uri=http://xx.xx/notify**加粗样式**

client_id:客户端接入标识。
response_type:授权码模式固定为code。
scope:客户端权限。
redirect_uri:跳转uri,当授权码申请成功后会跳转到此地址,并在后边带上code参数(授权码).
(2)浏览器出现授权服务器授权页面,之后将用户同意授权
(3)授权服务器将授权码转经浏览器发送给client(通过redirect_uri
(4)客户端拿着授权码转向授权服务器索要访问access_token

(2) 密码模式

提供用户名+密码换取token令牌:常用的password密码模式(提供用户+密码换取token)
在这里插入图片描述
(1)资源拥有者将用户名、密码发送给客户端
(2)客户端拿着资源拥有者的用户名、密码向授权服务器请求令牌(access_token),请求如下:

/uaa/oauth/token? 
client_id=p2pweb&client_secret=fgsdgrf&grant_type=password&username=shangsan&password=123456

参数列表如下:
client_id:客户端准入标识。
client_secret:客户端秘钥。
grant_type:授权类型,填写password表示密码模式
username:资源拥有者用户名。
password:资源拥有者密码。
(3)授权服务器将令牌(access_token)发送给client

(3)客户端凭证

在这里插入图片描述

/uaa/oauth/token?client_id=p2pweb&client_secret=fdafdag&grant_type=client_credentials

参数列表如下:
client_id:客户端准入标识。
client_secret:客户端秘钥。
grant_type:授权类型,填写client_credentials表示客户端模式

(4) 简化模式

在这里插入图片描述
(1)资源拥有者打开客户端,客户端要求资源拥有者给予授权。它将浏览器被重定向到授权服务器,重定向时会附加客户端的身份信息。
(2)浏览器出现向授权服务器授权页面,之后将用户同意授权。
(3)授权服务器将授权码将令牌(access_token)以Hash的形式存放在重定向uri的fargment中发送给浏览 器

/uaa/oauth/authorize? 
client_id=p2pweb&response_type=token&scope=app&redirect_uri=http://xx.xx/notify

三、Spring Cloud OAuth2 + JWT 实现

注意:使用OAuth2 解决问题的本质是引入了一个认证授权层,认证授权层链接资源的拥有者,在授权层里面,资源的拥有者可以给第三方应用授权去访问我们某些保护资源。
在这里插入图片描述

3.1 JWT

3.1.1 JWT令牌的优点

  1. JWT基于json,非常方便解析。
  2. 可以在令牌中自定义丰富的内容,易扩展。
  3. 通过非对称加密算法及数字签名技术,防止篡改、安全性高。

3.1.2 JWT令牌的结构

JWT令牌由Header、Payload、Signature三部分组成,每部分中间使用点分隔
在这里插入图片描述

  1. header
    头部包括令牌的类型(即JWT)及使用的哈希算法(如HMAC SHA256或RSA)。
    { “alg”: “HS256”,
    “typ”: “JWT”
    }
    HS256就是HMAC-SHA256,加密算法使用HMAC,摘要算法使用SHA256。
    将生成的jwt令牌第一部分使用Base64还原原始内容如下:
public static void main(String[] args) {
	byte[] header = java.util.Base64.getDecoder().decode("eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9"); 
	System.out.println(new String(header)); 
}
  1. payload
    第二部分是负载,内容也是json对象,他是存放有效信息的地方,它可以存放jwt提供的现成字段。
    比如:iss(签发者),exp(过期时间戳), sub(面向的用户)等,也可以自定义字段。
    {
    “sub”: “1234567890”,
    “name”: “456”,
    “admin”: true
    }
    最后将第二部分负载使用Base64Url编码,得到一个字符串就是JWT令牌的第二部分。
  2. signature
    第三部分是签名,此部分用于防篡改。这个部分使用base64url将前两部分进行编码
    base64UrlEncode(header):
    jwt令牌的第一部分。 base64UrlEncode(payload)
    jwt令牌的第二部分。 secret: 签名所使用的密钥。

    JWT三个部分只有第三部分加密的,通过数字签名机制,我们既可以保证数据完整性,也可以对数据来源进行身 份验证。
  3. 什么是签名?
    签名是数字签名,发送方将消息原文使用摘要算法生成摘要,再用私钥对摘要进行加密,生成数字签名。
    传输数据时为了保证数据的完整性可以使用数字签名技术:
    1、发送方使用私钥对内容进行数字签名
    2、将内容附带数字签名发送给对方
    3、对方收到内容和数字签名,使用公钥进行验签(相当于解密的过程),如果发现内容不一致则说明传输过程被篡改
  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SpringCloud是一个基于Spring Boot的开源微服务框架。SpringCloud Gateway是SpringCloud生态中的一个组件,提供了一种基于路由的API网关解决方案。JWT是JSON WEB Token的缩写,是一种用于身份认证和授权的开放标准。OAuth2是一种授权框架,用于向用户授权第三方应用访问他们的资源。 在微服务架构中,每个服务都是独立的,网关作为服务的入口,可以实现对外的请求过滤和路由。SpringCloud Gateway使用HttpClient进行内部请求的调度和路由。同时,它还提供了一些高阶的路由和过滤功能,如重定向、URL重写、限流、熔断、重试等。 JWT是一种轻量级的认证方案,通过在HTTP请求中添加一个JSON WEB Token,实现对用户进行身份认证和授权。JWT的使用极大地简化了认证过程,前后端可以通过JWT判断用户的身份和权限。 OAuth2为开发者提供了一种授权框架,可以授权第三方应用获取用户访问他们的资源。OAuth2支持多种授权类型,如授权码模式、密码模式、客户端模式和隐式模式。使用OAuth2,可以更好地保护用户的隐私和安全。 综上所述,SpringCloud Gateway、JWTOAuth2都是现代化的解决方案,对于设计和开发微服务架构的应用程序来说,它们都是必不可少的组件。有了它们,开发人员可以更好的搭建分布式架构,确保数据安全性、隐私安全性和服务的可靠性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值