Spring-security-oAuth2分享

oAuth2简介

OAuth 2.0是用于授权的行业标准协议。OAuth 2.0致力于简化客户端开发人员的工作,同时为Web应用程序,桌面应用程序,移动电话和客厅设备提供特定的授权流程。该规范及其扩展正在IETF OAuth工作组内开发。


代码地址

https://github.com/guo-yong123/spring-cloud-security-oauth2.git

oAuth2主要包含有以下主要角色

  • 资源所有者

  • 客户端 包括 client_id和client_secret

  • 认证服务器(Authorization server): 即服务提供商专门用来处理认证的服务器,简单点说就是登录功能(验证用户的账号密码是否正确以及分配相应的权限)

  • 资源服务器(Resource server): 即服务提供商存放用户生成的资源的服务器。它与认证服务器,可以是同一台服务器,也可以是不同的服务器。简单点说就是资源的访问入口,比如上节中提到的“云笔记服务”和“云相册服务”都可以称之为资源服务器。

  • 交互流程

oAuth2四种授权类型,主要说下授权码模式和密码模式

  • 授权码模式

    • 授权码是一个临时性的凭证,用来换取access_token和refresh_token

      code只能使用一次,用完作废。

    • 这个 code 的作用是保护 token 的安全性。如果直接把 token 返回给应用,很容易被拦截、窃听。引入了 code 之后,即使攻击者能够窃取到 code,但是由于他无法获得应用保存在服务器的 client_secret,因此也无法通过 code 换取 token。使用code换取token为什么不容易被拦截、窃听呢?这是因为,首先,这是一个从服务器到服务器的访问,黑客比较难捕捉到;其次,这个请求通常要求是 https 的实现。即使能窃听到数据包也无法解析出内容。

      有了这个 code,token 的安全性大大提高。因此,oAuth2.0 鼓励使用这种方式进行授权,而简单模式则是在不得已情况下才会使用。

    • 获取授权码
      http://localhost:9090/oauth/authorize?client_id=client&response_type=code
    • 获取token
      http://localhost:8080/oauth/token?grant_type=authorization_code&code=
  • 密码模式

    • 密码模式中,用户向客户端提供自己的用户名和密码。客户端使用这些信息,向 "服务商提供商" 索要授权。在这种模式中,用户必须把自己的密码给客户端,但是客户端不得储存密码。这通常用在用户对客户端高度信任的情况下,比如客户端是操作系统的一部分。

      一个典型的例子是同一个企业内部的不同产品要使用本企业的 oAuth2.0 体系。

      获取token
      http://localhost:9090/oauth/token?username=user&password=123456&grant_type=password&scope=select&client_id=client_2&client_secret=123456
  • oauth2提供的默认端点

    • /oauth/authorize:授权端点
      /oauth/token:令牌端点
      /oauth/confirm_access:用户确认授权提交端点
      /oauth/error:授权服务错误信息端点
      /oauth/check_token:用于资源服务访问的令牌解析端点
      /oauth/token_key:提供公有密匙的端点,如果使用JWT令牌的话

最新文章

  1. lecture10-模型的结合与全贝叶斯学习
  2. Haskell 笔记 ①
  3. HDU 4043 FXTZ II (组合数学-排列组合)
  4. 可辨别iPhone真假的网址
  5. ConfigurationManager.GetSection()方法的使用
  6. MySQL 5.7 参数 – log_timestamps
  7. Git版本控制工具使用:Error pulling origin: error: Your local changes to the following files would be overwritten by merge
  8. Tomcat 改BUG之 localhost:8080 404
  9. Oracle中 Instr 这个函数
  10. DirectFB 之 字体显示(2)
  11. css样式中如何设置中文字体?
  12. 这个表明将http协议转成websocket协议
  13. python 数据分类汇总
  14. 获取环境变量,0x000000cb 操作系统找不到已输入的环境选项
  15. c#文件管理
  16. (转)C# Windows服务 弹出消息提醒框
  17. linux查看在线用户并踢出用户
  18. LVL类及接口使用介绍(License Verification Library )
  19. ViewController之间的转场和数据传递
  20. 【转】高手带你深入理解ucos任务堆栈

热门文章

  1. B2B电商正在向一个新的方向转变
  2. nyoj 366 D的小L (全排列)
  3. nyoj 83-迷宫寻宝(二) (计算几何, 叉积)
  4. Docker解决下载镜像速度慢
  5. 力扣(LeetCode)猜数字大小 个人题解
  6. 领扣(LeetCode)第三大的数 个人题解
  7. 使用 Rsync 从 Windows 同步数据到 Linux
  8. .NET做人脸识别并分类
  9. python描述:链表
  10. Windows 10上源码编译glog和gflags 编写glog-config.cmake和gflags-config.cmake | compile glog and glags on windows from source