OAuth_2
角色:
OAuth2.0为用户和应用定义了如下角色:
资源拥有者、资源服务器、客户端应用、授权服务器
资源拥有者:拥有共享数据的人或应用,比如Facebook的用户就是
资源拥有者,但资源拥有者也可以是一个应用
资源服务器:托管资源的服务器。比如Facebook
客户端应用:请求访问存储在资源服务器资源的应用。资源被资源拥有者所
拥有。客户端应用可以是一个请求访问用户Facebook账号的第三方游戏
授权服务器:授权客户端应用能够访问资源拥有者所拥有的资源。授权服务器和资源
服务器可以是同一个服务器,但不是必须的,如果这二个服务器是分开的,OAuth2.0
没有讨论二个服务器应该如何通信,这是由资源、授权服务器自行决定的
客户端类型:
保密、公有
保密的客户端能够对外部保持客户端密码保密。该客户端密码是由授权
服务器分配给客户端应用的。为了避免欺骗,该密码是授权服务器用来
识别客户端的。例如一个保密的客户端可以是web应用,除了管理员,没有
任何人能够访问服务器和看到该密码。
公有的客户端不能使客户端密码保密。比如移动手机应用或桌面应用汇将
密码嵌入在内部。这样的应用可能被破解,并且泄露密码。
客户端配置:
web应用、用户代理、原生
web应用:运行在web服务器内的应用,实际上,web应用一般由浏览器和服务端
组成。如果web应用需要访问资源服务器(Facebook账号),然后客户端密码被保存
在服务器上,因此密码是保密的。
用户代理: 用户代理应用比如运行在浏览器上的JavaScript应用,浏览器
是用户代理,用户代理应用可以保存在web服务器上,但应用程序只运行一次
下载的用户代理。
原生应用:比如桌面应用或移动手机应用。
授权:
客户端标识,客户端秘钥和重定向URI:
在客户端应用能请求访问资源服务器的资源之前,客户端应用程序
必须先在资源服务器相关联的授权服务器中进行注册。注册一个一次性
的任务。一旦注册了,除非客户端注册被取消了,注册将持续有效。注册
后客户端应用将由授权服务器分配客户端标识和秘钥。在授权服务器上,
客户端标识和秘钥是唯一标识客户端应用的,如果客户端应用注册了多个授权
带我去,每一个授权 服务器将 发出唯一的标识给该客户端应用。无论什么时候客户端
应用,想要访问同样资源服务器上的资源,都需要通过发送客户端标识和秘钥到授权服务器
来验证自己。在注册过程中,客户端应用也注册了一个重定向URI,当资源拥有者授权给客户 应用时,该重定向URI会被使用。当资源拥有者成功的通过授权服务器给客户端应用时,
资源拥有者被重定向回客户端应用,再跳转到该重定向URI
授权批准类型:
授权码、契约、资源拥有者秘钥证书、客户端证书
授权码:资源拥有者访问客户端应用,客户端应用告诉用户通过授权
服务器Facebook来登录到客户端应用。 为了通过授权服务器登录,用户
通过客户端被重定向到授权服务器。客户端应用发送它的客户端标识给授权服务器
那么授权服务器就知道哪个应用尝试访问守保护的资源。当被重定向回客户端应用时
授权服务器发送给用户特定的重定向URI,即客户端已经提前与授权服务器注册。随着
重定向,授权服务器发送一个代表授权的授权码。 当在客户端应用的重定向被URI被访问时,
客户端应用直接连接授权服务器,客户端应用发送授权码,客户端标识及秘钥,如果客户端
应用能接受这些值,那么授权服务器返回一个访问令牌。 现在客户端应用就可以用该访问
令牌请求资源服务器的资源了,该访问令牌可作为客户端授权和授权访问资源。
契约: 契约授权类似授权码授权,除了用户完成授权后,访问令牌返回给客户端
应用外。当用户代理被重定向到重定向URI,访问令牌因此被返回。这意味着访问
令牌可以被用户的代理访问,或者在契约授权过程中参与的原生应用。访问令牌在
web服务器上不上安全存储的。 进一步说,客户端应用可以只发送它的客户端标识给
授权服务器。如果客户也发送它的秘钥,那么客户端秘钥将不得不保存在用户代理或原生
应用里,那将使它很容易被破解。 契约授权大多数用在用户代理或原生应用中。用户代理
或原生应用将收到授权服务器的访问令牌
资源拥有者秘钥证书: 资源拥有者证书授权方法通过客户端应用访问资源
拥有者证书来工作。比如用户可以在客户端应用输入他的Facebook用户名
及秘钥(证书) 该客户端应用就可以用用户名和秘钥访问用户在Facebook的资源
客户端证书: 客户端证书授权对应客户端需要在资源服务器访问资源或调用函数的情形
使用,与特定的资源拥有者无关
OAuth_2的更多相关文章
随机推荐
- httpclient get/post请求
public static String httpPost(String url, JSONObject json) { String respContent = null; try{ HttpPos ...
- ruby语法之方法
ruby中的方法相当于python的函数 其定义规则为: 方法名应以小写字母开头.如果您以大写字母作为方法名的开头,Ruby 可能会把它当作常量,从而导致不正确地解析调用. 方法应在调用之前定义,否则 ...
- Redis GeoHash
原创转载请注明出处:https://www.cnblogs.com/agilestyle/p/11632810.html 背景 微信找附近的人,滴滴找附近的单车,饿了么找附近的餐馆 GeoHash算法 ...
- 【NLP新闻-2013.06.16】Representative Reviewing
英语原文地址:http://nlp.hivefire.com/articles/share/40221/ 注:本人翻译NLP新闻只为学习专业英语和扩展视野,如果翻译的不好,请谅解! (实在是读不大懂, ...
- jmeter函数 助手
Jmeter(一)——函数助手 __char:把一组数字转化成Unicode __counter:计数器,支持多线程(可以理解为多用户) 线程组设置为2个用户,循环两次${__counter(true ...
- springMVC接收请求参数的几种方式
1. 用注解@RequestParam绑定请求参数 用注解@RequestParam绑定请求参数a到变量a,当请求参数a不存在时会有异常发生,可以通过设置属性required=false解决,例如: ...
- node连接mysql数据库
1. 创建项目,安装mysql 创建项目文件夹test, 在test文件夹下yarn add mysql --save安装mysql: 2. node使用mysql 在test文件夹下,创建test. ...
- NOIP day1 玩具谜题
逻辑有一些复杂,但是理解之后就很简单.题目描述中mogician什么的太暴力了...-1s 按照题目描述模拟,就能满分. /* Au: GG * CCF NOIP2016 day1 * toy */ ...
- JAVA中STL使用
Vector:和c++的vector使用方法类似. Vector<Integer> vec=new Vector<> (); ArrayList:Java.util.Array ...
- 彻底搞定C指针-函数名与函数指针
函数名与函数指针 一 通常的函数调用 一个通常的函数调用的例子://自行包含头文件 void MyFun(int x); //此处的申明也可写成:void MyFun( int ); int mai ...