1.1 Oauth2认证流程:

1.2 Token携带相关参数注释:

首先讲下资源与授权服务配置注解:
请求优先@EnableAuthorizationServer,@EnableResourceServer处理,剩下的无法匹配的由SpringSecurity处理

2.1资源服务器配置:

2.2其他属性:

accessDeniedHandler 授权失败且主叫方已要求特定的内容类型响应
resourceTokenServices加载 OAuth2Authentication 和 OAuth2AccessToken 的接口eventPublisher 事件发布-订阅 根据异常的clazz触发不同event

2.2 授权服务器配置(两种方式):

A.手动:

B.直接用数据库:

2.3 配置授权服务器端点,如:令牌存储;令牌自定义;用户批准和授权类型 以及配置服务器端点的安全

2.4 yml配置例子(以github作为认证服务器):

2.5 引入依赖

授权有授权码模式;隐式授权模式;密码模式;客户端模式;常用授权码和密码,介绍如下:

3.1 授权码模式:


参数列表如下:
client_id:客户端id,和授权配置类中设置的客户端id一致。
response_type:授权码模式固定为code
scop:客户端范围,和授权配置类中设置的scop一致。
redirect_uri:跳转uri,当授权码申请成功后会跳转到此地址,并在后边带上code参数(授权码)。
拿到授权码后申请令牌:


参数解释:
Access_token:访问令牌,客户端拿着访问令牌即可向服务提供方获取相应资源或信息
Refresh_token:刷新令牌,由于访问令牌是有失效时间的,所以一般情况下都是在访问令牌即将失效时使用刷新令牌可重新获取新的访问令牌
token_type:有MAC Token与Bearer Token两种类型,两种的校验算法不同,RFC 6750建议Oauth2采用 Bearer Token(http://www.rfcreader.com/#rfc6750)。
expires_in:过期时间,单位为秒。
scope:范围,与定义的客户端范围一致。

3.2 资源服务器授权配置:

1 配置公钥:

3 在config包下创建ResourceServerConfig类
4 资源服务器测试是否携带令牌以及令牌是否有效:

注:若不携带令牌或令牌过期或错误则无法验证一般报如下错误:

3.3 密码模式:(相对授权码而言少了一步授权码获取 由用户直接将用户名密码传给客户端 客户端直接拿着这两个去申请令牌)


参数:
grant_type:密码模式授权填写password
username:账号
password:密码

上边参数使用x-www-form-urlencoded方式传输,使用postman测试如下:

参数:
client_id:客户端准入标识。
client_secret:客户端秘钥。
grant_type:授权类型,填写password表示密码模式
username:资源拥有者用户名。
password:资源拥有者密码

注意:当令牌没有过期时同一个用户再次申请令牌则不再颁发新令牌。
校验令牌:

校验成功则会返回与该令牌绑定的相关用户信息
参数列表:
exp:过期时间,long类型,距离1970年的秒数(new Date().getTime()可得到当前时间距离1970年的毫秒数)。
user_name: 用户名
client_id:客户端Id,在oauth_client_details中配置
scope:客户端范围,在oauth_client_details表中配置
jti:与令牌对应的唯一标识
companyId、userpic、name、utype、id:这些字段是本认证服务在Spring Security基础上扩展的用户身份信息
刷新令牌的使用:

生成一个新的访问令牌
grant_type : 固定为 refresh_token
refresh_token:刷新令牌(注意不是access_token,而是refresh_token)
注:刷新令牌成功,会重新生成新的访问令牌和刷新令牌,令牌的有效期也比旧令牌长。
刷新令牌通常是在令牌快过期时进行刷新。
Xml配置:

3.4 WebSecurityConfig中HttpSecurity一些参数解释:

3.5 Jwt令牌:

jwt与token的验证思路区别:

Token:后端接收到前端传过来的token,若果是通过数据库或redis或session进行对比验证,这种方式为令牌验证

  1. 用户输入用户名和密码,发送给服务器。
  2. 服务器验证用户名和密码,正确的话就返回一个签名过的token(token 可以认为就是个长长的字符串),浏览器客户端拿到这个token。
  3. 后续每次请求中,浏览器会把token作为http header发送给服务器,服务器验证签名是否有效,如果有效那么认证就成功,可以返回客户端需要的数据。 特点: 这种方式的特点就是客户端的token中自己保留有大量信息,服务器没有存储这些信息。
    Jwt:后端接收到前端传过来的token,如果是通过一套加密解密算法(RSA)来确定用户的身份是否合法,这种方式为jwt(Header头部(令牌的类型(即JWT)及使用的哈希算法(如HMACSHA256或RSA)),Payload负载(内容也是一个json对象,它是存放有效信息的地方,它可以存放jwt提供的现成字段,比如:iss(签发者),exp(过期时间戳),sub(面向的用户)等,也可自定义字段。此部分不建议存放敏感信息,因为此部分可以解码还原原始内容。最后将第二部分负载使用Base64Url编码,得到一个字符串就是JWT令牌的第二部分)和Signature签名(用于防止jwt令牌被篡改)。由三部分生成token,三部分之间用“.”号做分割)
    2 生成公钥和私钥:

    参数解释:
    Keytool是一个java提供的证书管理工具
    -alias:密钥的别名
    -keyalg:使用的hash算法
    -keypass:密钥的访问密码
    -keystore:密钥库文件名,
    xc.keystore保存了生成的证书
    -storepass密钥库的访问密码
    查询证书信息:
    Keytool -list -keystore wang.keystore
    删除别名:
    Keytool -delete -alias xckey -keystore wang.keystore
    3 导出公钥:
    需要先下载openssl(加解密工具包):http://slproweb.com/products/Win32OpenSSL.html并配置对应的环境变量
    4 cmd进入wang.keystore所在目录执行:
    keytool -list -rfc --keystore wang.keystore | openssl x509 -inform pem -pubkey

    上半部即为公钥 将其放到编辑器 调整为一行
    生成jwt令牌:


    校验令牌:

    结果:

    若令牌校验正确,则可看到与令牌绑定的相关信息数据

Security+Oauth2权限认证(案例 源码)相关推荐

  1. Spring Security OAuth2.0认证授权知识概括

    Spring Security OAuth2.0认证授权知识概括 安全框架基本概念 基于Session的认证方式 Spring Security简介 SpringSecurity详解 分布式系统认证方 ...

  2. Spring Security OAuth2.0认证授权五:用户信息扩展到jwt

    历史文章 [Spring Security OAuth2.0认证授权一:框架搭建和认证测试] [Spring Security OAuth2.0认证授权二:搭建资源服务] [Spring Securi ...

  3. 玩转Spring Cloud Security OAuth2身份认证扩展——电话号码+验证码认证

    在程序的认证过程中,除了常规的用户名和密码方式(可以参考深入理解Spring Cloud Security OAuth2身份认证),也经常会出现电话号码+密码的方式:电话号码+验证码的方式:或者第三方 ...

  4. Spring Security OAuth2.0认证授权三:使用JWT令牌

    历史文章 [Spring Security OAuth2.0认证授权一:框架搭建和认证测试] [Spring Security OAuth2.0认证授权二:搭建资源服务] 前面两篇文章详细讲解了如何基 ...

  5. 【商业版】C# ASP.NET 通用权限管理系统组件源码中的数据库访问组件可以全面支持Access单机数据库了...

    可能在5年前还用过Access单机数据库但是后来很少用了,可能平时接触的都是大型管理类系统的开发工作大部分是Oracle.SQLServer数据库上做开发的,很少做一些小网站或者单机版本的东西,所以跟 ...

  6. ASP.NET 生成唯一不重复的订单号 支持多用户并发、持多数据库的实现参考(C#.NET通用权限管理系统组件源码组成部分)...

    我们在日常开发项目过程中往往需要各种订单单号的产生方法,而且是支持多用户并发.支持多种数据库的,我们并不想为每个项目都写一些独立的代码去实现这些功能,往往需要有个通用的函数比较爽一些. 下面我们以C# ...

  7. ThreadLocal 简介 案例 源码分析 MD

    Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...

  8. 【Spring】Spring Security OAuth2 JWT 认证

    1.概述 Spring Security OAuth2 JWT 认证服务器配置 Spring Security OAuth2 JWT 资源服务器配置 Spring Security OAuth2 Re ...

  9. jsp漂亮的登录界面源码_【案例+源码】详解MVC框架模式及其应用

    案例+源码]详解MVC框架模式及其应用 写在开头: 首先我们需要知道,框架模式.模式.开发模式是三种不同的概念,但他们的目的都一样:解耦! 1.关于MVC框架模型 MVC是三个单词的缩写: M,Mod ...

  10. AidLux“换脸”案例源码详解 (Python)

    "换脸"案例源码详解 (Python) faceswap_gui.py用于换脸,可与facemovie_gui.py身体互换源码(上一篇文章)对照观看 打开faceswap_gui ...

最新文章

  1. SSM+KindEditor实现富文本编辑器图片上传
  2. 反思对新项目如何快速上手
  3. App设计灵感之十二组精美的数据图表展示App设计案例
  4. 数据库系统原理(第三章数据库设计 )
  5. java 邮件模板_Spring Boot 2发送邮件手把手图文教程
  6. 分享 2 个“捷径”,帮你 6 个月达到阿里 P7 水平
  7. 基于PyTorch的CV框架,北大学生出品TorchCV
  8. python函数降低编程复杂度_Python重构此函数,将其认知复杂度从19降低到允许的15...
  9. 产品管理的工作流程是什么
  10. android studio 上手使用 大水逼问题
  11. 电源php38电路,六款uc3842开关电源电路图分享
  12. APP登录界面UI设计欣赏
  13. impdp导入报错:ora-39125,ora-06502,LPX-00225,ora-06512
  14. 5部靠身材和脸蛋撑起了整部电影,女主光环太刺眼,部部是经典!
  15. python训练自己中文语料库_中文语料库构建过程详细教程
  16. Kubeadm创建集群
  17. 用Redis中的zset实现一个限流器
  18. 成绩不好的穷孩子,该做出选择了
  19. 物联网协议-CoAP协议简介
  20. [BZOJ 4763]雪辉

热门文章

  1. 前端每日实战:121# 视频演示如何用 CSS 和 D3 创作一个小鱼游动的交互动画
  2. NPM酷库:minimatch,模式匹配字符串
  3. 《zabbix_agent客户端的添加》-5
  4. LR监控linux系统资源
  5. python map()
  6. 388. Longest Absolute File Path
  7. 机器学习:LibSVM与weka在eclipse中的使用
  8. JS鼠标捕获DIV内选中的坐标和宽高
  9. world wide web publishing无法启动 127错误
  10. HP LaserJet P1007 装不到驱动