欢迎访问昆山宝鼎软件有限公司网站! 设为首页 | 网站地图 | XML | RSS订阅 | 宝鼎邮箱 | 后台管理


新闻资讯

MENU

软件开发知识

其中 clientId 、 clientSecre 劳务派遣信息管理系统 t 是在 GitHub 注册一个应用时生成的

点击: 次  来源:宝鼎软件 时间:2017-06-01

原文出处: waylau

利用 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类脚色:

  • resource owner:资源所有者,指终端的“用户”(user)
  • resource server:资源处事器,即处事提供商存放受掩护资源。会见这些资源,需要得到会见令牌(access token)。它与认证处事器,可以是同一台处事器,也可以是差异的处事器。假如,我们会见新浪博客网站,那么假如利用新浪博客的账号来登录新浪博客网站,那么新浪博客的资源和新浪博客的认证都是同一家,可以认为是同一个处事器。假如,我们是新浪博客账号去登录了知乎,那么显然知乎的资源和新浪的认证不是一个处事器。
  • client:客户端,代表向受掩护资源举办资源请求的第三方应用措施。
  • authorization server: 授权处事器, 在验证资源所有者并得到授权乐成后,将发放会见令牌给客户端。

    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 ---|               |
     +--------+                               +---------------+
  • (A)用户打开客户端今后,客户端请求资源所有者(用户)的授权。
  • (B)用户同意给以客户端授权。
  • (C)客户端利用上一步得到的授权,向认证处事器申请会见令牌。
  • (D)认证处事器对客户端举办认证今后,确认无误,同意发放会见令牌。
  • (E)客户端利用会见令牌,向资源处事器申请获取资源。
  • (F)资源处事器确认令牌无误,同意向客户端开放资源。
  • 个中,用户授权有四种模式:

  • 授权码模式(authorization code)
  • 简化模式(implicit)
  • 暗码模式(resource owner password credentials)
  • 客户端模式(client credentials)
  • 实践 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')

    设置