双重OAuth 2.0架构
OAuth 2.0支持几种grant type,由于安全性不同,所以适用范围也不同。背景知识:《理解OAuth 2.0》
| grant type | 是否需要secret | 是否出现授权界面 |
|---|---|---|
| 授权码模式(Authorization Code) | 是 | 是 |
| 隐藏模式(Implicit) | 否 | 是 |
| 密码模式(Password) | 否 | 否 |
| 客户端证书模式(Client credentials) | 是 | 否 |
secret需要保密,而常见的使用场景能否保密呢?如下:
| 使用场景 | 能否保密 |
|---|---|
| web server site | 能 |
| web server api | 能 |
| web app(为避免混乱,下面称为js app) | 不能 |
| mobile app(Android, iOS等) | 不能 |
可以看到app(js,Android, iOS等)无法保密,所以需要无secret的模式才行,也就是隐藏模式(Implicit)或密码模式(Password)。从安全性和可维护性角度考虑,Password模式是让用户直接输入密码,所以只提供给厂商自己app使用。第三方app只有隐藏模式(Implicit)可用,各家服务商的安全警告如下:
- Google : Installed apps are distributed to individual machines, and it is assumed that these apps cannot keep secrets. 原文链接
- Facebook : This app secret should never be included in client-side code or in binaries that could be decompiled. 原文链接
现在来看看常用的账号体系服务商支持的grant type。
| 账号体系 | web支持Authorization Code | web支持Implicit | mobile sdk支持Implicit |
|---|---|---|---|
| 支持 | 支持、js sdk支持 | 支持 | |
| 支持 | js sdk支持 | 支持 | |
| Github | 支持 | 否 | 否,无sdk |
| 支持 | 支持 | 支持 | |
| 微信 | 支持 | 否 | 支持,但文档错误 |
| 微博 | 支持 | 支持,但文档没说,混乱 | 支持,但文档没说,混乱 |
可以看到Github只支持授权码模式,只能在web server上用,不支持app,请谨慎使用。不过由于github是生产力工具,使用github登录的第三方网站也都是生产力工具,比如gitbook.com、travis-ci.org,只在web上用,也是可以理解的。
而微信不支持web Implicit,所以只支持web server,不支持web app,在纯API架构下,会带来混乱。
纯API架构是只开发一套api,同时支持各种app(js、Android、iOS),而没有了web server site。架构如图(https://www.processon.com/view/link/567220ace4b0f79964befccd):
如果再使用OAuth Client即第三方登录,那它的纯API架构如下(https://www.processon.com/view/link/566fe5d1e4b0554d8cfaa6e2):
可以看到大部分公司做API仅供自家app使用,也就是私有API,用这种架构就可以了。多亏了API的HTTP server是自家的,所以也能把授权码模式加进去,用来支持github/微信,架构如下(https://www.processon.com/view/link/56723463e4b0f79964c05229):
而如果API本身需要开放,就没了“自家的API”这个概念了,假设叫做api.example.com,那将变成双重OAuth架构(https://www.processon.com/view/link/5672343ee4b02f55904265bf):
可以想到会有两种场景:
- 第三方app没有自己的HTTP server,比如JS app,无法获取token。如果它们携带自己的app key去github/微信获取用户授权,跳转回JS app的地址获取code,交给api.example.com携带secret去github/微信验证,如果想通过的话,那此app key和secret要对应,即第三方app把自己的secret都告诉api.example.com才行,这样勉强可以用,但安全风险较大……如果第三方app携带example的app key去github/微信获取用户授权,跳转地址不对,无法获得code,此路不通。
- 第三方app有自己的HTTP server,则可以自己换取token,然后发给api.example.com即可。
本文首发地址:http://tomato.life/blog/double-oauth-2
双重OAuth 2.0架构的更多相关文章
- 一个功能完备的.NET开源OpenID Connect/OAuth 2.0框架——IdentityServer3
今天推荐的是我一直以来都在关注的一个开源的OpenID Connect/OAuth 2.0服务框架--IdentityServer3.其支持完整的OpenID Connect/OAuth 2.0标准, ...
- 构建微服务-使用OAuth 2.0保护API接口
微服务操作模型 基于Spring Cloud和Netflix OSS 构建微服务-Part 1 基于Spring Cloud和Netflix OSS构建微服务,Part 2 在本文中,我们将使用OAu ...
- OAuth 2.0(网转)
(一)背景知识 OAuth 2.0很可能是下一代的"用户验证和授权"标准,目前在国内还没有很靠谱的技术资料.为了弘扬"开放精神",让业内的人更容易理解" ...
- OAuth 2.0中文译本
(一)背景知识 OAuth 2.0很可能是下一代的“用户验证和授权”标准,目前在国内还没有很靠谱的技术资料.为了弘扬“开放精神”,让业内的人更容易理解“开放平台”相关技术,进而长远地促进国内开放平台领 ...
- OAuth 2.0 安全案例回顾
原文:http://drops.wooyun.org/papers/598 0x00 背景 纵观账号互通发展史,可以发现OAuth比起其它协议(如OpenID)更流行的原因是,业务双方不仅要求账号本身 ...
- OAuth 2.0安全案例回顾
转载自:http://www.360doc.com/content/14/0311/22/834950_359713295.shtml 0x00 背景 纵观账号互通发展史,可以发现OAuth比起其它协 ...
- 微服务安全(二)OAuth 2.0
1. 概念 OAuth是一个开放的.安全的用户认证协议,允许用户让第三方应用访问该用户在某一网站上存储的私密的资源,而无须将用户名和登录口令提供给第三方应用.授权的第三方应用只能在特定的时段内访问特定 ...
- OAuth 2.0 扩展协议之 PKCE
前言 阅读本文前需要了解 OAuth 2.0 授权协议的相关内容, 可以参考我的上一篇文章 OAuth 2.0 的探险之旅. PKCE 全称是 Proof Key for Code Exchange, ...
- 微服务系列之授权认证(一) OAuth 2.0 和 OpenID Connect
1.传统架构的授权认证 传统应用架构,用户使用账号密码登录后,可以使用前端cookie存储登录状态,也可以使用后端session方式存储登录状态,小应用这么做其实很高效实用,当应用需要横向扩展时,就需 ...
随机推荐
- 构造persen
package java1; //人类 public class Person { //属性 成员变量 String name; int age=30; //方法 函数 成员函数 void hello ...
- hibernate(四) 双向多对多映射关系
序言 莫名长了几颗痘,真TM疼,可能是现在运动太少了,天天对着电脑,决定了,今天下午花两小时去跑步了, 现在继上一章节的一对多的映射关系讲解后,今天来讲讲多对多的映射关系把,明白了一对多,多对多个人感 ...
- ThinkPHP5 隐藏接口里面的index.php
隐藏index.php 官方介绍是这样的:http://www.kancloud.cn/thinkphp/thinkphp5_quickstart/145250 可以去掉URL地址里面的入口文件ind ...
- 【工具】CodeSmith Generator 7.0.2激活步骤
学过三层的人应该认识CodeSmith Generator吧,今天我就跟大家一起探讨下CodeSmith Generator 7.0.2的激活,这最新版本破解的难度也是超越以往......具体看这篇日 ...
- 【WP 8.1开发】文件选取器的使用方法
在以往的WP7x/8.0开发中,我们使用选择器可以浏览并打开图片.音频.视频等一些特殊文件,在8.0 SDK中的运行时API(从Win 8 app中移植)尽管提供了Windows.Storage.Pi ...
- Ajax基础知识《一》
对于网站开发人员,一定不会陌生的Ajax技术,本篇就让我们认识一下它,或许在日后的开发过程中我们就可以使用到.Ajax在那方面使用的比较多呢?答案:表单注册,传统的表单注册,有时需要填写大量的信息,当 ...
- 邻接矩阵无向图(二)之 C++详解
本章是通过C++实现邻接矩阵无向图. 目录 1. 邻接矩阵无向图的介绍 2. 邻接矩阵无向图的代码说明 3. 邻接矩阵无向图的完整源码 转载请注明出处:http://www.cnblogs.com/s ...
- c#Dictionary键值对的使用
直接粘代码吧 using System; using System.Collections.Generic; using System.Linq; using System.Text; using S ...
- 给 Web 前端开发人员推荐20款 CSS 编辑器
CSS 和 HTML,JavaScript 是网页的基础,作为前端开发人员,对这三者都要很熟悉.特别是未来流行全栈开发的时代,每项技术都是你知识结构中必要的一个节点. 在开发中,选择好工具是非常重要的 ...
- Windows Azure Service Bus (2) 队列(Queue)入门
<Windows Azure Platform 系列文章目录> Service Bus 队列(Queue) Service Bus的Queue非常适合分布式应用.当使用Service Bu ...