OAuth授权

OAuth概念

OAuth(开放授权)是一个开放标准,允许用户让第三方应用访问该用户在某一网站上存储的私密的资源(如照片,视频,联系人列表),而无需将用户名和密码提供给第三方应用,下面以github 为例,简单讲述OAuth2.0

应用场景

假如你访问我的网站,看到上面有篇文章写的很烂,你想去喷它一下,留言后发现需要登陆才能进行评论,此时给你两个选择:1. 注册并登陆后进行评论 2. 使用github登陆授权后评论。由于你实在不爽,迫不及待想喷它,注册登陆太烦了,可能还有邮箱,手机等验证。于是直接点击了github授权,此时OAuth认证流程就开始了。需要注意的是,即便刚刚用户才登陆过github,我的网站也不可能随便发个请求给github,就能拿到用户信息。因此,我的网站需要和github需要一个协商。## 认证流程

1.网站和github协商

github会对用户的权限做分类,读取仓库信息的权限(CircleCi,Travis-Ci的集成测试)、写入仓库的权限,用户个人常用信息获取等。我如果我的这个应用需要获取用户的follower等信息,我先得去github注册一个应用,在申请的时候需要选择需要获得的权限。首先注册一个github的OAuth应用,填写应用名称,以及重定向地址(不能乱填)。


注册应用

授权id,secret,以及callback_url

注册完成后,github给我发了一个client_id以及另外一个client_secret.

2.用户和github协商

用户进入我的网站,点击 github 登录按钮的时候,我的网站会把上面拿到的 client_id 交给用户,让他进入到 github 的授权页面,github看到client_id,就知道是从哪个应用重定向过来的,于是它会把想要获取的权限列出来,让用户选择是否允许授权这些权限。如果用户拒绝,整个认证结束。如果用户觉得可以,选择授权,页面后跳转到上面注册的redirect_url,并且附带一个一次性的code。这个时候,用户和 github 之间的协商就已经完成github 也会在自己的系统中记录这次协商,表示该用户已经允许在我的网站访问上直接操作和使用他的部分资源。


登陆认证
授权对应权限

服务端可以指定相应的scope参数,给用户授权


授权scope为repo和user

登陆后,客户可以拿到相应的code

获得code

但是由于没有这个路由,页面会显示404,所以需要服务端重定向到首页。拿到了code,接下来就可以去拿取access-token了。### 3.应用拿用户的票据去github获取相应的数据

3.应用拿用户的票据去github获取相应的数据

在第2步的时候,已经拿到了用户的code,但是如果服务器直接拿code去github请求,肯定会遭到拒绝,因为任何人都知道code,你还不能证明是你本人访问。接下来需要使用client_secret.拿着授权获取的code,以及client_id以及client_secret去请求github,获取access_token.


获取token

4.用户使用github账户,在我的应用上使用

上一步 github 已经把最后的凭证 access_token 给我了,通过 github 提供的 API 加access_token就能够访问用户的信息了,能获取用户的哪些权限在 response 中也给了明确的说明,scope 为 user 和 gist,也就是只能获取 user 组和 gist 组两个小组的权限,user 组中就包含了用户的名字和邮箱等信息了。


通过token获取个人信息

关键参数

1. client_id 注册时获取,用于获取code和access_token
2. client_secret 注册时获取,用于获取access_token
3. code 用户登陆后,OAuth提供方返回的code,表示,用户同意使用该OAuth认证方式,登陆应用。
4. redirect_url 注册时填写的重定向路径, 如果在服务端手动改写和redirect_url不同的地址,则无法重定向成功, OAuth方会返回重定向错误的提示.
5.scope 用于配置权限,一般有user, repo

code如何保证安全

1.code是一次性的,再次使用这个code去请求,则失败
再次使用code会失败
2.使用的client_id,client_secret永久保存在服务器上的,只要服务器是安全的,即便有人中间试图截取code,也是无效的,请求token需要发送client_id,client_secret以及code
3.redirect_url 如果重定向的地址和向OAuth提供商注册的地址不同,则不会返回code。如果地址注册的是localhost,有可能窃取code,但是 也只有能访问该电脑的人能获取权限。## 和OpenId的区别
OpenId 只用于身份认证(Authentication),允许你以同一个账户在多个网站登陆。它仅仅是为你的合法身份背书,当你以 Facebook 账号登陆某个站点之后,该站点无权访问你的在 Facebook 上的数据。但是OAuth授权登陆后,可能该网站就可以访问你的Facebook账号的followers,你关注的人之类的数据。
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,456评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,370评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,337评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,583评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,596评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,572评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,936评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,595评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,850评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,601评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,685评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,371评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,951评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,934评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,167评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,636评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,411评论 2 342

推荐阅读更多精彩内容