适用范围

仅需临时访问的场景

用户会定期在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
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:隐式授权(Implicit Grant)类型的开放授权的更多相关文章

  1. OAuth2:客户端证书授权(Client Credentials)类型的开放授权

    适应范围 认证服务器不提供像用户数据这样的重要资源,仅仅是有限的只读资源或者一些开放的API.例如使用了第三方的静态文件服务,如Google Storage或Amazon S3.这样,你的应用需要通过 ...

  2. 显示转换explicit和隐式转换implicit

    用户自定义的显示转换和隐式转换 显式转换implicit关键字告诉编译器,在源代码中不必做显示的转型就可以产生调用转换操作符方法的代码. 隐式转换implicit关键字告诉编译器只有当源代码中指定了显 ...

  3. Scala 隐式(implicit)详解

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

  4. C++ - 模板类模板成员函数(member function template)隐式处理(implicit)变化

    模板类模板成员函数(member function template)隐式处理(implicit)变化 本文地址: http://blog.csdn.net/caroline_wendy/articl ...

  5. [Selenium]显式等待 Explicit wait & 隐式等待 Implicit wait

    显式等待 Explicit wait 显示等待 , 就是明确的要等到某个元素出现或者某个元素满足某种条件,每隔一段时间检查一次,等不到,就一直等,如果在规定的时间内还没有找到,就跳出来检查间隔的时间和 ...

  6. Scala之隐式转换implicit详解

    假设我们有一个表示文本的行数的类LineNumber: class LineNumber ( val num : Int ) 我们可以用这个类来表示一本书中每一页的行数: val lineNumOfP ...

  7. C# 3.0 / C# 3.5 隐式(推断)类型 var

    概述 你可能对隐式类型(或隐式推断类型)这个名称比较陌生,但是 var 这个关键字应该很熟悉. 在 C# 中使用 var 声明一个对象时编译器会自动根据赋值语句推断这个局部变量的类型. 赋值以后,这个 ...

  8. c++隐式转换(implicit conversion)

    1.缘由 最近在使用nlohmann的json,发现有些地方不是特别好用,所以就想自己修改一下(目的是为了增加类似jsoncpp中可以//增加注释的功能),在看源码的时候看到了一个迷惑的地方,就是解析 ...

  9. C#隐式FTPS (Implicit FTPS)

    實現的方式是通過第三方程式庫實現的,當然最主要的是開源且免費,已測試過沒有問題! 目前還沒有直接取得目錄FileInfo list的方法,不過還好可以用GetDirectoryList來取得類似的結果 ...

随机推荐

  1. BZOJ 3620: 似乎在梦中见过的样子

    似乎在梦中见过的样子.... 一道水题调了这么久,还半天想不出来怎么 T 的...佩服自己(果然蒟蒻) 这题想想 KMP 但是半天没思路瞟了一眼题解发现暴力枚举起始点,然后 KMP 如图: O( n2 ...

  2. C#委托delegate、Action、Func、predicate 对比用法

    委托是一个类,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递.事件是一种特殊的委托. 一.委托的声明   (1) delegate delegate我们常用到的一种声明 Delega ...

  3. office xml 方式

    office2007以上版本(2003需要增加2007插件)可以采用xml方式操作生成excel,效率高,无并发问题,比传统com组件方式更方便

  4. Spring学习(十八)Bean 的三种依赖注入方式介绍

    依赖注入:让调用类对某一接口实现类的依赖关系由第三方注入,以移除调用类对某一接口实现类的依赖.接下来将详细的向大家介绍Spring容器支持的三种依赖注入的方式以及具体配置方法:•    属性注入方法• ...

  5. Windows10下Django虚拟环境配置和简单入门实例

    环境win10家庭版64位 + python 3.5 + Django 1.8.2 1.创建virtualenv目录 开始/运行/cmd回车,进入cmd窗口,到自己指定的目录下创建virtualenv ...

  6. 用sitemap做主页的菜单栏

    首先打开vs--> 新建项-->选择站点地图. 站点地图建好了  其中具体的节点根据自己情况配好就行. 接下来是两个非常重要的类: using System.Collections.Gen ...

  7. Docker架构图

    Docker架构图 服务器---主机系统中通过Cgroup和Namespace-----------划分成多个bins/libs---------------每个app运行在独立的bins/libs中 ...

  8. python-模块入门二(模块循环导入,区分python文件的两种用途,模块搜索路径,软件开发的目录规范)

    一.模块的循环导入问题 run.py # import m1 # 第一次导入 m1.py # 错误示范 ''' print('正在导入m1') from m2 import y #第一次导入m2 x= ...

  9. Vue2 Virtual DOM

    vue 虚拟dom 的重点 是以 javascript 对象模拟 dom 节点. //用Javascript代码表示DOM节点的伪代码 Let domNode = { tag: 'ul' attrib ...

  10. lightoj1197 素数双筛,可以参考poj的那题双筛

    /* 判断一个数是否是素数,只要判断这个数有没有在[2,sqrt(n)]区间的因子 同样,对于大数短区间的筛选,同样可以用这种判断方式, 先筛出sqrt(n)范围内的素数,然后用这些素数去筛出区间内的 ...