OAuth协议简介

  OAuth协议要解决的问题

    OAuth协议中的各种角色

  OAuth协议运行流程

OAuth协议,在网上也看了一些资料,意思就是给你颁发一个临时的通行证,你拿着这个通行证可以访问我的某些资源,不包括密码等关键信息,最常见的就是第三方登录,如qq登录,微信登录,第三方应用可以访问我们的用户名头像等一些基本信息。

在这里举个例子来说明

比如说你有一个应用,微信助手,可以美化你微信上自拍的照片,这对双方都是有利的,可以快速扩展第三方应用的用户量,这个应用如果想要获取到你微信上的照片,就需要微信授权。

常见的就是微信给你账户和密码,你就能获取到微信的自拍照了,但是这是有问题的:

1,应用可以访问用户在微信上的所有的数据

2,用户只有修改密码,才能收回授权

3,密码泄露的可能性大大提高

OAuth协议就是为了解决这样的问题而生的:

1,用户名/密码-->令牌,令牌的权限是有限的,它只能访问你的微信自拍数据

2,令牌是有有效期的

OAuth协议主要角色

Provider:服务提供商,提供令牌。相当于例子中的微信。

Resources Owner:资源所有者,就是用户,用户拥有自拍照资源。

Client:第三方应用,例子中的微信助手。

Authentication Server:认证服务器,认证用户的身份,并产生令牌。

Resource Server:资源服务器,作用1,存放用户资源,就是例子中的自拍数据,;2,验证令牌。 (认证服务器和资源服务器在物理上可以是一台服务器)

OAuth协议运行流程:

1,用户访问第三方应用

2,第三方应用请求用户授权

3,用户同意授权,第三方应用就会访问服务提供商的认证服务器(如访问微信的服务器,告诉他用户已同意访问自拍数据),问他要一个令牌

4,认证服务器看是不是用户真的同意了,如果是,会发一个令牌给第三方应用

5, 第三方应用就拿着令牌去访问资源服务器去申请获取资源

6,资源服务器会验证获取资源请求的令牌,验证通过,会把申请的资源开发给用户

第二步同意授权是关键,OAuth定义了四种授权模式

授权码模式(authentication code):授权码模式是功能最完整,流程最严密的授权模式。互联网所有服务提供商qq微信淘宝百度微博...都是这种

密码模式(resource ownowner password credentials):app用

简化模式(implicit):用得少

客户端模式(client credcredentials):用得少

授权码模式:

1,用户访问客户端

2,如果第三方应用客户端需要用户授权,会将用户导向认证服务器,用户同意授权这个动作会在认证服务器上完成

3,如果用户同意授权,认证服务器会将第三方应用重新导回到第三方应用一个指定的URL,并携带一个授权码(还不是令牌token)

4,第三方应用拿到授权码再去认证服务器申请令牌(在第三方应用的服务端完成,对用户不可见)

5,认证服务器会核对授权码是不是第三步发回去的,如果是,给客户端发放令牌token

因为这个过程中会产生授权码,其他的授权模式没有,所以叫授权码模式。

主要特点:用户同意授权的动作在认证服务器上完成的,认证服务器可以肯定用户授权的真假。

而其他的密码模式、客户端模式同意授权是在第三方应用上完成的,完成以后第三方应用向认证服务器申请令牌的时候带着一些信息说用户同意我了 ,存在的问题就是认证服务器不知道用户是否真的同意授权了,可能是第三方应用伪造的。

授权码模式要求第三方应用必须有一个服务器,有些网站只有静态页,就可以使用简化模式。

Spring Security构建Rest服务-1000-使用SpringSocial开发第三方登录之大白话OAuth协议的更多相关文章

  1. Spring Security构建Rest服务-1001-spring social开发第三方登录之spring social基本原理

    OAuth协议是一个授权协议,目的是让用户在不将服务提供商的用户名密码交给第三方应用的条件下,让第三方应用可以有权限访问用户存在服务提供商上的资源. 接着上一篇说的,在第三方应用获取到用户资源后,如果 ...

  2. Spring Security构建Rest服务-1200-SpringSecurity OAuth开发APP认证框架

    基于服务器Session的认证方式: 前边说的用户名密码登录.短信登录.第三方登录,都是普通的登录,是基于服务器Session保存用户信息的登录方式.登录信息都是存在服务器的session(服务器的一 ...

  3. Spring Security构建Rest服务-0102-Spring Social开发第三方登录之qq登录

    图一 基于SpringSocial实现qq登录,要走一个OAuth流程,拿到服务提供商qq返回的用户信息. 由上篇介绍的可知,用户信息被封装在了Connection里,所以最终要拿到Connectio ...

  4. Spring Security构建Rest服务-1300-Spring Security OAuth开发APP认证框架之JWT实现单点登录

    基于JWT实现SSO 在淘宝( https://www.taobao.com )上点击登录,已经跳到了 https://login.taobao.com,这是又一个服务器.只要在淘宝登录了,就能直接访 ...

  5. Spring Security构建Rest服务-1202-Spring Security OAuth开发APP认证框架之重构3种登录方式

    SpringSecurityOAuth核心源码解析 蓝色表示接口,绿色表示类 1,TokenEndpoint 整个入口点,相当于一个controller,不同的授权模式获取token的地址都是 /oa ...

  6. Spring Security构建Rest服务-1201-Spring Security OAuth开发APP认证框架之实现服务提供商

    实现服务提供商,就是要实现认证服务器.资源服务器. 现在做的都是app的东西,所以在app项目写代码  认证服务器: 新建 ImoocAuthenticationServerConfig 类,@Ena ...

  7. Spring Security构建Rest服务-0900-rememberMe记住我

    Spring security记住我基本原理: 登录的时候,请求发送给过滤器UsernamePasswordAuthenticationFilter,当该过滤器认证成功后,会调用RememberMeS ...

  8. Spring Security构建Rest服务-1401-权限表达式

    Spring Security 的权限表达式 用法,在自定义的BrowserSecurityConfig extends WebSecurityConfigurerAdapter 配置文件里,每一个a ...

  9. Spring Security构建Rest服务-1205-Spring Security OAuth开发APP认证框架之Token处理

    token处理之二使用JWT替换默认的token JWT(Json Web Token) 特点: 1,自包含:jwt token包含有意义的信息 spring security oauth默认生成的t ...

随机推荐

  1. IntelliJ IDEA 2017版 springloaded实现热部署

    1.配置pom.xml文档 <?xml version="1.0" encoding="UTF-8"?> <project xmlns=&qu ...

  2. 用Git将项目发布在GitHub里

    转载自http://blog.csdn.net/u011572517/article/details/50537407,个人加了一些注意事项和解释. githud是一个程序员以后成长都会使用到的,先不 ...

  3. arcgis api for flex 开发入门(一)环境搭建

    http://www.cnblogs.com/wenjl520/archive/2009/06/02/1494514.html arcgis api for flex 开发入门(一)环境搭建arcgi ...

  4. iOS的block内存管理

    初始情况下: block本身.__block修饰的变量以及在block内部使用的变量都是在栈里的. __block修饰的变量的地址会作为实参传入block块内部(暂时先这么理解,实际比较复杂).blo ...

  5. c# Clipboard.SetDataObject(bmp1) 在可以调用 OLE 之前,必须将当前线程设置为单线程单元(STA)模式。请确保您的 Main 函数带有 STAThreadAttribute 标记。 只有将调试器附加到该进程才会引发此异常

    c# Clipboard.SetDataObject(bmp1)  在可以调用 OLE 之前,必须将当前线程设置为单线程单元(STA)模式.请确保您的 Main 函数带有 STAThreadAttri ...

  6. hdu3333 Turing Tree 2016-09-18 20:53 42人阅读 评论(0) 收藏

    Turing Tree Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Tota ...

  7. swipe js bug

    最近因为要写新的mobile site页面,有好几个页面上面必须用到photo slider. 使用插件: /* * Swipe 2.0 * * Brad Birdsall * Copyright 2 ...

  8. .NET 4中的多线程编程之一:使用Task(转载)

    原文地址:http://www.cnblogs.com/yinzixin/archive/2011/11/04/2235233.html .NET 4为了简化多线程编程,提供了System.Threa ...

  9. 一起学习MVC(1)初步了解MVC

    MVC 即模型视图控制器(Model View Controller)     利于团队开发.便于管理与维护.代码易读性强.未来的主流开发框架结构. 当然,缺点也显而易见,与传统开发框架相比有很大的不 ...

  10. 【实战TFS】【QQ群】了解别人是如何使用TFS的

    长时间在这个QQ群里面混,了解到其他人是如何使用TFS系统的,也与网友们一起探讨,共同提高,还有分享的大量资料文档. 推荐一下:):)