适用范围

仅需临时访问的场景

用户会定期在API提供者那里进行登录

OAuth客户端运行在浏览器中(Javascript、Flash等)

浏览器绝对可信,因为该类型可能会将访问令牌泄露给恶意用户或应用程序

流程剖析

1. 让用户明白所做的操作并请求认证

这一步与授权码认证模式中的操作类似,即当牵涉到OAuth认证时,应首先让用户明确该操作。然后将用户引导至授权页面。
该授权接口的URL会在开发者文档中给出,以谷歌为例:

https://accounts.google.com/o/oauth2/auth

在请求该页面时还需附带几个参数:

client_id

在应用注册时提供

redirect_uri

授权认证后的重定向地址

scope

应用所请求访问的数据,一般由空格分隔的多个字符串组成

response_type

对于此授权类型来说为“token”,即在授权成功后会返回access token

2. 从URL中解析access token

当授权顺利完成后,用户会被重定向到redirect_uri中指定的URL并附带access_token等重要数据,它们会包含在url hash中,例如:

http://example.com/callback#access_token=ya29GAHES6ZSzX&token_type=Bearer&expires_in=3600

JavaScript是不会自动将解析hash段中的元素解析成键/值对,因此我们需要手动进行该操作:

1
2
3
4
5
6
7
8
var oauthParams = {};
// parse the query string
// from http://oauthssodemo.appspot.com/step/2
var params = {}, queryString = location.hash.substring(1), regex = /([^&=]+)=([^&]*)/g, m;
while (m = regex.exec(queryString)) {
    oauthParams[decodeURIComponent(m[1])] = decodeURIComponent(m[2]);
}
...

3. 访问API

拿到了access_token,API接口就向你敞开了大门,接下来的操作我想就无需阐述了。

从整个流程可以看出,相比授权码授权,隐式授权少了第一步获取Authorization Code的过程,因此变得更为简单。但正因为如此也降低了安全性。

OAuth2
RECOMMENDS
OAuth2:Authorization FlowsOAuth2:授权码(Authorization Code)类型的开放授权OAuth2:客户端验证授权(Resource Owner Password)类型的开放授权OAuth2:客户端证书授权(Client Credentials)类型的开放授权

OAuth2:隐式授权(Implicit Grant)类型的开放授权相关推荐

  1. Scala 隐式(implicit)详解

    文章正文 通过隐式转换,程序员可以在编写Scala程序时故意漏掉一些信息,让编译器去尝试在编译期间自动推导出这些信息来,这种特性可以极大的减少代码量,忽略那些冗长,过于细节的代码. 1.Spark 中 ...

  2. c语言参数隐式转换,Implicit conversions(隐式转换)

    当预期在不同类型的值的上下文中使用表达式时,可能会发生转换: int n = 1L; // expression 1L has type long, int is expectedn = 2.1; / ...

  3. jQuery 中的显式遍历(explicitly iterate)与隐式遍历(implicit iteration)

    jQuery 中的显式遍历(explicitly iterate)与隐式遍历(implicit iteration) 在 jQuery 中,我们把 $() 叫做核心函数. 如果通过核心函数找到的元素不 ...

  4. C语言隐式类型转换(字符类型以及短整型的运算规则)

    C的整型算术运算总是至少以缺省整型类型的精度来进行的.         为了获得这个精度,表达式中的字符和短整型操作数在使用之前被转换为普通整型,这种转换称为整型提升. 举个例子: char a = ...

  5. java3D反恐精英3_统一5.3.0f4错误CS0029;不能隐式转换'UnityEngine.Vector3'类型为'float'...

    请帮助,我正在制作一个砖破坏者游戏并在桨脚本上工作,但它在第17行显示错误,我不知道如何将float更改为vector3 using UnityEngine; using System.Collect ...

  6. oauth2.0 php简化模式,OAuth2.0学习(1-5)授权方式2-简化模式(implicit grant type)

    授权方式2-简化模式(implicit grant type) 简化模式(implicit grant type)不通过第三方应用程序的服务器,直接在浏览器中向认证服务器申请令牌,跳过了"授 ...

  7. c#自定义类型的转换方式operator,以及implicit(隐式)和explicit (显示)声明的区别...

    msdn参考:http://msdn.microsoft.com/zh-cn/library/s53ehcz3.aspx http://msdn.microsoft.com/zh-cn/library ...

  8. 【Scala笔记——道】Scala 隐式Implicit

    Scala隐式 隐式究竟是什么呢? scala 中隐式相较于java 来说是一种全新的特性.那么隐式究竟是什么呢? 隐式存在三种基本使用方式: - 隐式属性 - 隐式方法 - 隐式对象 隐式属性例如 ...

  9. Scalaz(1)- 基础篇:隐式转换解析策略-Implicit resolution

    在正式进入scalaz讨论前我们需要理顺一些基础的scalaz结构组成概念和技巧.scalaz是由即兴多态(ad-hoc polymorphism)类型(typeclass)组成.scalaz typ ...

最新文章

  1. 阿里钉钉,马云旗下的又一个千亿美金产品?
  2. Bitcoin 地址原理(2)私钥、公钥、地址基本概念
  3. Linux 条件变量使用细节(为何调用 pthread_cond_wait 前加锁,函数内部解锁,返回时又加锁)
  4. hive(3)——在hive中使用自己写的函数(python实现)
  5. windows2008 sp2 x64安装 ocs 2007 r2 笔记
  6. c语言成绩等级switch语句,请高手 帮忙做一道c语言题 编程,把百分制成绩转换成5级记分制,要求用switch语句。 90分以上(包括90):...
  7. 第十三节:易学又实用的新特性:for...of
  8. java控制台输出五行字符串_java五行代码导出Excel
  9. 翻译 - EXT JS 5:Controlling an Application with Router
  10. 多线程怎么保证数据安全_Python threading实现多线程 提高篇 线程同步,以及各种锁...
  11. python datetime datetime
  12. linux sleeping进程多_一文掌握Linux实战技能系统管理篇
  13. UCMA(OCS) 开发系列之一
  14. 优化技巧:提前if判断帮助CPU分支预测
  15. 魔鬼训练Day1作业
  16. Spring AOP术语:连接点和切点的区别。
  17. 华为freelace耳机修整详录
  18. ui设计师色彩运用_网页设计师的20多种色彩工具
  19. android游戏和ios游戏哪个多,Android游戏类App占27.1% 与iOS差异显著
  20. jsp及Servlet经典面试题以及答案

热门文章

  1. codeforces 598C C. Nearest vectors(极角排序)
  2. 解决安卓TextView高度和textSize大小不一致问题
  3. 实现IMSI、IMEI查询
  4. Castle ActiveRecord学习笔记四:各种映射
  5. 如何把MySql数据库中的数据导入到MyCat集群中_---Linux运维工作笔记050
  6. python数据结构剑指offer-二维数组中的查找
  7. 显式强制类型转换static_cast, dynamic_cast, const_cast, reinterpret_cast
  8. ubuntu登陆死循环(全是搜狗拼音的锅!!!!!!!!!!!)
  9. 通过SublimeCodeIntel设置JavaScript自动补全
  10. 随想录(以师带徒的原则)