利用 OAuth 2.0 认证的的长处是显然易见的。你只需要用同一个账号暗码,就能在各个网站举办会见,而免除了在每个网站都举办注册的繁琐进程。 本文将先容 OAuth 2.0 的道理,并基于 Spring Security 和 GitHub 账号,来演示 OAuth 2.0 的认证的进程。
什么是 OAuth 2.0
OAuth 2.0 的类型可以参考 : RFC 6749
OAuth 是一个开放尺度,劳务派遣管理系统,答允用户让第三方应用会见该用户在某一网站上存储的私密的资源(如照片,视频,接洽人列表),而无需将用户名和暗码提供应第三方应用。今朝,OAuth 的最新版本为 2.0
OAuth 答允用户提供一个令牌,而不是用户名和暗码来会见他们存放在特定处事提供者的数据。每一个令牌授权一个特定的网站(譬喻,软件开发,视频编辑网站)在特定的时段(譬喻,接下来的2小时内)内会见特定的资源(譬喻仅仅是某一相册中的视频)。这样,软件开发,OAuth 答允用户授权第三方网站会见他们存储在别的的处事提供者上的信息,而不需要分享他们的会见许可或他们数据的所有内容。
OAuth 2.0 的焦点观念
OAuth 2.0 主要有4类脚色:
OAuth 2.0 的认证流程
认证流程如下:
+--------+ +---------------+ | |--(A)- Authorization Request ->| Resource | | | | Owner | | |<-(B)-- Authorization Grant ---| | | | +---------------+ | | | | +---------------+ | |--(C)-- Authorization Grant -->| Authorization | | Client | | Server | | |<-(D)----- Access Token -------| | | | +---------------+ | | | | +---------------+ | |--(E)----- Access Token ------>| Resource | | | | Server | | |<-(F)--- Protected Resource ---| | +--------+ +---------------+
个中,用户授权有四种模式:
实践 OAuth 2.0
Talk is cheap!下面将演示代码。 本例子将通过 Gradle、Spring Boot、Spring Security、 Thymeleaf、等技能来实现一个client 以及 resource server,并 通过 GitHub来给我们的应用授权。
依赖
本项目基于Gralde 来打点依赖,读者可以自行改成 Maven 的方法:
// 该依赖对付编译刊行是必需的 compile('org.springframework.boot:spring-boot-starter-web') // 添加 Thymeleaf 的依赖 compile('org.springframework.boot:spring-boot-starter-thymeleaf') // 添加 Spring Security 依赖 compile('org.springframework.boot:spring-boot-starter-security') // 添加 Thymeleaf Spring Security 依赖,与 Thymeleaf 版本一致都是 3.x compile('org.thymeleaf.extras:thymeleaf-extras-springsecurity4:3.0.2.RELEASE') // 添加 Spring Security OAutp 依赖 compile('org.springframework.security.oauth:spring-security-oautp:2.1.0.RELEASE') // 该依赖对付编译测试是必需的,默认包括编译产物依赖和编译时依 testCompile('org.springframework.boot:spring-boot-starter-test') // 添加 Spring Security Test 依赖 testCompile('org.springframework.security:spring-security-test:4.2.2.RELEASE')
设置