提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


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

一、Spring Security Oauth2

Oauth2认证

OAuth(开放授权)是一个开放标准,允许用户授权第三方移动应用访问他们存储在另外的服务提供者上的信息,而不需要将用户名和密码提供给第三方移动应用或分享他们数据的所有内容,OAuth2.0是OAuth协议的延续版本。

Oauth2认证流程

第三方认证技术方案最主要是解决认证协议的通用标准 问题,因为要实现 跨系统认证,各系统之间要遵循一定的接口协议。

OAUTH协议为用户资源的授权提供了一个安全的、开放而又简易的标准。同时,任何第三方都可以使用OAUTH认证服务,任何服务提供商都可以实现自身的OAUTH认证服务,因而OAUTH是开放的。业界提供了OAUTH的多种实现如PHP、JavaScript,Java,Ruby等各种语言开发包,大大节约了程序员的时间,因而OAUTH是简易的。互联网很多服务如Open API,很多大公司如Google,Yahoo,Microsoft等都提供了OAUTH认证服务,这些都足以说明OAUTH标准逐渐成为开放资源授权的标准。

参考:https://baike.baidu.com/item/oAuth/7153134?fr=aladdin
Oauth协议:RFC 6749: The OAuth 2.0 Authorization Framework

Oauth2包括以下角色:

1、客户端 本身不存储资源,需要通过资源拥有者的授权去请求资源服务器的资源。

2、资源拥有者 通常为用户,也可以是应用程序,即该资源的拥有者。

3、授权服务器(也称认证服务器) 用来对资源拥有的身份进行认证、对访问资源进行授权。

4、资源服务器 存储资源的服务器。

 Spring security Oauth2认证

Spring security5 oauth2 配置 spring security oauth2原理_源服务器

具体可以理解为:

目录

一、Spring Security Oauth2

Oauth2认证

Oauth2认证流程

Oauth2包括以下角色:

 Spring security Oauth2认证

二、导入认证工程

1.将课件中oauth-server的工程导入到项目中去

 oauth中 application.yml

用户的application.yml

 授权码授权实现

1.后端登陆方法

登陆测试(应该传入令牌)

校验令牌

2.资源服务授权流程

传统授权流程

公钥私钥授权流程


1、用户请求认证服务完成认证。

2、认证服务下发用户身份令牌,拥有身份令牌表示身份合法。

3、用户携带令牌请求资源服务,请求资源服务必先经过网关。

4、网关校验用户身份令牌的合法,不合法表示用户没有登录,如果合法则放行继续访问。

5、资源服务获取令牌,根据令牌完成授权。

6、资源服务完成授权则响应资源信息。

二、导入认证工程

1.将课件中oauth-server的工程导入到项目中去

Spring security5 oauth2 配置 spring security oauth2原理_源服务器_02


 oauth中 application.yml

Spring security5 oauth2 配置 spring security oauth2原理_源服务器_03

用户的application.yml

Spring security5 oauth2 配置 spring security oauth2原理_服务器_04

 授权码授权实现

1.后端登陆方法

Spring security5 oauth2 配置 spring security oauth2原理_客户端_05

Spring security5 oauth2 配置 spring security oauth2原理_客户端_06

Spring security5 oauth2 配置 spring security oauth2原理_客户端_07

登陆测试(应该传入令牌)

客户端Id和客户端密码会匹配数据库oauth_client_details表中的客户端id及客户端密码。

点击发送: 申请令牌成功

Spring security5 oauth2 配置 spring security oauth2原理_源服务器_08

校验令牌


Spring security5 oauth2 配置 spring security oauth2原理_源服务器_09

 

Spring security5 oauth2 配置 spring security oauth2原理_spring cloud_10

2.资源服务授权流程

传统授权流程

Spring security5 oauth2 配置 spring security oauth2原理_服务器_11

客户端先去授权服务器申请令牌,申请令牌后,携带令牌访问资源服务器,资源服务器访问授权服务校验令牌的合法性,授权服务会返回校验结果,如果校验成功会返回用户信息给资源服务器,资源服务器如果接收到的校验结果通过了,则返回资源给客户端。

传统授权方法的问题是用户每次请求资源服务,资源服务都需要携带令牌访问认证服务去校验令牌的合法性,并根 据令牌获取用户的相关信息,性能低下。

公钥私钥授权流程

Spring security5 oauth2 配置 spring security oauth2原理_服务器_12

传统的授权模式性能低下,每次都需要请求授权服务校验令牌合法性,我们可以利用公钥私钥完成对令牌的加密,如果加密解密成功,则表示令牌合法,如果加密解密失败,则表示令牌无效不合法,合法则允许访问资源服务器的资源,解密失败,则不允许访问资源服务器资源。

 业务流程如下:

  1. 客户端请求认证服务申请令牌
  2. 认证服务生成令牌认证服务采用非对称加密算法,使用私钥生成令牌。
  3. 客户端携带令牌访问资源服务客户端在Http header 中添加: Authorization:Bearer 令牌。
  4. 资源服务请求认证服务校验令牌的有效性资源服务接收到令牌,使用公钥校验令牌的合法性。
  5. 令牌有效,资源服务向客户端响应资源信息

生成私钥公钥

(1)生成密钥证书 下边命令生成密钥证书,采用RSA 算法每个证书包含公钥和私钥

创建一个文件夹,在该文件夹下执行如下命令行:

keytool -genkeypair -alias qianggou -keyalg RSA -keypass qianggou -keystore qianggou.jks -storepass qianggou

Keytool 是一个java提供的证书管理工具

-alias:密钥的别名

-keyalg:使用的hash算法

-keypass:密钥的访问密码

-keystore:密钥库文件名,qianggou.keystore保存了生成的证书

-storepass:密钥库的访问密码

查询证书信息

keytool -list -keystore qianggou.jks

删除别名

keytool -delete -alias qianggou -keystore qianggou.jsk

导出公钥

openssl是一个加解密工具包,这里使用openssl来导出公钥信息。

安装 openssl:http://slproweb.com/products/Win32OpenSSL.html

安装资料目录下的Win64OpenSSL-1_1_0g.exe

配置openssl的path环境变量,如下图:

Spring security5 oauth2 配置 spring security oauth2原理_客户端_13

本教程配置在C:\OpenSSL-Win64\bin

cmd进入qianggou.jks文件所在目录执行如下命令(如下命令在windows下执行,会把-变成中文方式,请将它改成英文的-):

keytool -list -rfc --keystore qianggou.jks | openssl x509 -inform pem -pubkey

 

Spring security5 oauth2 配置 spring security oauth2原理_spring cloud_14

下面段内容是公钥

Spring security5 oauth2 配置 spring security oauth2原理_源服务器_15

将上边的公钥拷贝到文本public.key文件中,合并为一行,可以将它放到需要实现授权认证的工程中。