微信oauth2.0网页授权 授权的工作原理是怎样的?足够安全吗

不知道什么时候开始,我们已经习惯了点击“用XX帐号登录”或者“Login with XX”来访问网站,但是大多数人可能都不知道这背后涉及的事有多复杂。
OpenID和OAuth完全是为了两种不同的需求而生
OpenID的目标是为了帮助网站确认一个用户的身份
OAuth的目标是为了授权第三方在可控范围下访问用户资源
OpenID是怎么认证用户的?
一个网站如果想要接入OpenID认证是非常简单的,不需要创建应用,不需要App Key,不需要Secret,只需要将用户导向OpenID Provider的Entry并带上Callback,用户只要同意提供信息,你就可以拿到这个用户的“唯一标识”。
请注意这里我使用了“唯一标识”这种说法,因为对于网站来说,OpenID Provider提供的既不是用户的UID,也不是用户的E-Mail,比如Google在默认情况下提供的就是一个几十位长的字符串,这个字符串是随机生成的,第三方网站无法从中获得用户的任何私人信息。这么说可能很抽象,举个例子:
比如我用Google的OpenID服务登录,先把我导向Google的授权页面,我使用Google帐号登录并同意后,页面跳回,拿到了我的“唯一标识”,这个唯一标识可能是“cd5ff97ca2d446e52c6ff4baea56fd4bcfcea30afcaaf6b73bcb04a1”,从这个字符串里无法获得任何的个人信息(甚至连邮箱地址也不知道),只知道以后只要使用谷歌登录并返回“cd5ff97ca2d446e52c6ff4baea56fd4bcfcea30afcaaf6b73bcb04a1”这个标识符,那就是我在登录。
显而易见,OpenID是专为登录认证而生,它使用简单,门槛很低,但是如果你想在认证过程中获得用户的其他信息(比如E-Mail)就得多做一步了。
如何在OpenID认证的过程中获得用户的部分信息?
传统的OpenID是做不到这一点的,你只能拿到“唯一标识”。不过新版的OpenID引入了“OpenID attribute exchange”这个概念,这样第三方可以在用户的许可范围内获得用户的部分具体信息。
还是上面的例子,如果告诉Google,我想知道这个用户的E-Mail地址,谷歌就会在授权页面告诉用户:“想知道你的E-Mail地址”,这时如果用户点击同意,就能在回调请求中拿到“”这个地址。
对于网站能拿到的信息,不同Provider有不同的规定,一般来说包括aim, blog, country, dob (date of birth), email, fullname, gender, icq, image, jabber, language, msn, nickname, phone, postcode, skype, timezone, website, yahoo等等。
那么,OAuth又是怎么认证用户的?
与OpenID相比,网站想接入OAuth要稍微麻烦点,网站需要先创建应用,拿到Key和Secret,才能接入Provider。
OAuth的授权过程并不是身份认证的过程,这一点需要特别清楚,网站走完OAuth流程并拿到用户的授权token后还需要通过token调用相应的用户信息接口才能获得“唯一标识”,举个例子:
我想通过新浪微博登录,要先把我redirect到新浪微博的授权页面,我通过微博帐号登录并授权后,页面跳回,拿到我的访问token后还要再调用一个接口来获得我的新浪会员UID,这个UID就是新浪用户的“唯一标识”了。
可以看出,OAuth相对于OpenID最大的区别就是,网站实际上是拿到了你的帐户访问权限继而确认你的身份,这是一个安全隐患,因为网站在拿到你的“唯一标识”的同时还拿到了一把你的账户的“临时钥匙”。至于网站会不会拿这把钥匙“干坏事”,这个只有站长心里清楚。同时OAuth还比OpenID多了几个额外的请求步骤,登录所费时间一定是长于OpenID的。
大多数的网民是没有这种意识的,他们对“通过XX登录”的认证过程中的提示早已视而不见:
有多少人真正注意过左边的文字?
豆瓣写的更清楚,XXX应用“希望操作你在豆瓣上的数据”而不是“希望使用你的豆瓣账号来登录XXX”
国内外主要服务商认证方式对比
提供商 认证方式 认证后网站获得的权限 安全程度
Google OpenID + OAuth 如果使用OpenID,网站无法获得任何额外权限(包括获得你的Google账户名称),如果使用OAuth,网站须明确说明需要访问哪些服务的权限并经过用户逐项同意 高
Facebook OAuth 默认授权情况下只能读取你的公开信息(不包含E-Mail地址),如果网站需要更高级权限需要明确声明并经过用户逐项同意 高
QQ空间 OAuth 默认授权情况下只能读取你的公开信息(不包含QQ号),如果网站需要更高级权限需要明确声明并经过用户逐项同意 高
新浪微博 OAuth 默认授权情况下可以获得你的所有信息(私信及身份证号、姓名等除外),并可以你的身份操作绝大多数微博功能 低
Windows Live OAuth 默认授权情况下只能读取你的“唯一标识”,如果网站需要更高级权限需要明确声明并经过用户逐项同意,默认情况下基本类似于OpenID 高
腾讯微博 OpenID + OAuth 如果使用OpenID,网站无法获得任何额外权限,如果使用OAuth,默认会获得用户所有操作的权限,除非应用明确声明只需要部分权限… 使用OpenID时,高使用OAuth时,中
搜狐微博 OAuth 默认授权情况下可以获得你的绝大多数信息,并可以你的身份操作绝大多数微博功能 低
网易微博 OAuth 默认授权情况下可以获得你的绝大多数信息,并可以你的身份操作绝大多数微博功能 低
百度 OAuth 默认授权情况下只能读取你的公开信息(UID、百度帐户名),如果网站需要更高级权限需要明确声明并经过用户逐项同意 高
人人 OAuth 默认授权情况下只能读取你的公开信息(UID、好友关系等),如果网站需要更高级权限需要明确声明并经过用户逐项同意 高
开心网 OAuth 默认授权情况下只能读取你的公开信息,如果网站需要更高级权限需要明确声明并经过用户逐项同意 高
来总结一下吧
总体来说,国外的网站都比较正规,第三方网站几乎无法获得任何私人信息,而国内网站对个人信息的保护水平高低不齐,某些网站甚至没有任何保护,新浪微博等网站万能钥匙式的“第三方接入”,用一句话来说,不管你敢不敢用,我反正是不敢用
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:130次
排名:千里之外开发人员如何安全地使用 OAuth 认证?
按投票排序
补充一点。RFC里面Oauth威胁模型分析。和
两个人的回答合并一下就很好了。
管理好自己的KEY,维护开源程序清空KEY和相关信息采用SSL传输信息防止返回的token被截取检查OAuth服务商传送过来的内容是否安全比如包含JavaScript代码之类的情况如果有可能 保存Access Token 的时候可以考虑加密保存,使用的时候解密使用
1、使用OAuth22、缩短令牌生命周期3、约束程序的诱导行为,让用户为自己的选择负责
已有帐号?
社交帐号登录
无法登录?
社交帐号登录OAuth 授权的工作原理是怎样的?足够安全吗_百度知道
OAuth 授权的工作原理是怎样的?足够安全吗
全性上还是有些问题的。大家实现得都不是很好,纷纷落马。就目前来看,而是实现者的问题,OAuth是不安全的,互联网就在大规模爆OAuth漏洞,倒不是说协议本身。最近一段日子。但是这不是协议本身的错误,新浪,腾讯,百度,这个你可以去乌云搜搜就知道了
其他类似问题
为您推荐:
其他1条回答
Auth2。每种客户端都预分配一个 client_id 和 client_secret(这样服务器就可以在必要的情况下禁用特定的 client_id;甚至可以根据不同的 client 分配不同等级的权限).。 判定用户是否已., 使用用户名和密码获取 access_token 和 refresh_token
oauth的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁您所在的位置: &
OAuth API密钥如何降低API安全威胁
OAuth API密钥如何降低API安全威胁
作者:Jan Stafford 翻译:邹雅玲
TechTarget中国
有了破解版API,我们就有了更多方法来防止API安全漏洞。遗憾的是,通过使用简单的几种攻击方式,黑客们就可以轻松地破坏API。
API聚合平台Apigee的首席安全架构师Subra
Kumaraswamy与我们讨论了API安全的最佳实践方式。
有了破解版API,我们就有了更多方法来防止API安全漏洞。遗憾的是,通过使用简单的几种攻击方式,黑客们就可以轻松地破坏API。Subra
Kumaraswamy是API管理系统的供应商Apigee公司的首席安全架构师,同时也是Cloud Security and
Privacy(一篇发自于O'Reilly媒体上的一篇文章)的合作者。他说,为了应对黑客袭击,开发人员不得不采用多种方法来保证API的安全性。
作为Cloud Security
Alliance的创始人之一,Kumaraswamy认为,开发人员必须在API管理平台中加入一些合适的安全工具,例如速度限制和安全令牌管理。并不是为每一类应用程序定制一种防护方案,Kumaraswamy建议,开发人员使用API网关来进行接下来的工作,同时也可以支持全球政策的实施。
这本次采访中,Kumaraswamy向我们提供了几点关于创建API强安全性的几条建议,其中包括OAuth的使用、提供API密钥、身份验证机制、AWS
API安全性等等。
在建立API过程中,OAuth框架处于什么状态?这种方法是否仍可行呢?
Subra Kumaraswamy:在API安全建设的过程中,OAuth [Open
Authorization]框架是大家非常熟悉的一种授权框架。在向Web
应用程序、桌面应用程序、移动应用程序和物联网提供特定授权功能的同时,OAuth2.0也非常重视客户端开发的简易性。然而,我们需要注意的是,OAuth是一种委托的授权协议,而不是真正的授权协议。因此,超越OAuth标准的OpenID
Connect被列为开发人员可选方案之中。除了想要对应用程序授以访问受保护的用户代表资源外,这些开发人员还想要以编程的方式来验证用户身份。
在API知道哪类客户发送请求的情况下,如何选择并使用最合适的认证方法来登陆本地应用程序?
Kumaraswamy:当本地应用程序中加入终端客户认证功能后,开发人员应用采用三脚流OAuth2.0。在此模型中,以之前成功的用户认证为例,本地应用程序的授权服务器上含有一个短期的访问令牌和长期刷新令牌。访问令牌向API服务提供受保护资源的访问权,而使用刷新令牌会更新短期存在的访问令牌。这种方法可以降低登录冲突,使用户与移动应用程序保持连续的互动。如果出现令牌泄露的事情,开发人员可以通过使用安全阀而轻松地撤销访问令牌和刷新令牌。
开发人员在提供API密钥时会犯哪些共同的错误?如何避免这些错误?
Kumaraswamy:在访问受保护资源之前,API密钥需通过API网关的验证。一类常见的错误是,在提供密钥时,会赋予平台操作一些应用程序不需要的特权,而这种特权与API产生冲突。例如,如果你向软件开发人员暴露了API支付验证,那么API密钥应仅限于支付验证时使用,而不应该被赋予修改支付明细的特权。
另外一类常见错误是,在密钥没有配额的情况下就可以无限访问API。这会引起拒绝服务攻击,同时通过自动化机器人可以收集到重要数据。使用散列法和随机因子来保护API密钥证书是一个标准惯例,例如SHA-256或者其他更高的版本。
当创建API安全时,开发人员还应注意哪些问题?
Kumaraswamy:开发人员应该以一种API威胁模型开始,在应用模型的基础上试图理解威胁的运作原理,例如内部API和外部API。他们必须知道有些因素会对API用户构成威胁,例如可信的开发人员、自行注册的开发人员以及其合作者。掌握这些信息后,API设计者和开发人员必须建立一些合适的安全措施以应对各种威胁。
例如,我们可以看到,API威胁模型中,不可信的开发人员通过网络能够看到一些敏感的数据。在此,无论运输层安全性中的敏感数据处于运输状态还是静止状态,开发人员都要使用加密技术对实施保护。
开发人员应该使标准应用程序安全性达到最佳状态,例如,通过使用动态和静态的编码分析工具来测试API中是否存在标准 OWASP Top
10缺陷。最后,开发人员应该在安全的位置记录API活动,对任何非正常行为进行定期审核,例如API暴利破解攻击。
使用AWS API后,安全方面的优点和缺点分别有哪些?
Kumaraswamy: AWS
API和认证机制是亚马逊所独有的,对管理AWS基础设施即服务资源起到一定的限制作用。使用署名的请求模型(一种基于署名的认证模型HMAC即基于哈希的消息验证代码)对AWS(具象状态传输)API也可以起到保护。HMAC将哈希功能与共享在客户与AWS之间的对称密钥结合在一起使用。AWS客户要在请求信息(例如AWS服务、范围、活动和时间标记)以及共享于开发人员之间的AWS私有密钥基础上签署每一份API请求。AWS
API安全机制对用户身份进行核查、对REST调用具有完整的保护性,同时免于再次遭受攻击。从某种方式来说,AWS认证机制与双脚OAuth(客户认证授权)有异曲同工之处。【编辑推荐】【责任编辑: TEL:(010)】
关于&&&&的更多文章
ApiDemo,该应用程序演示了很多API。这个示例应用程序可以作为 A
虽然网购有诸多优点,越来越多的人热衷于此,但网购的安全性也逐渐凸显
讲师: 15694人学习过讲师: 7605人学习过讲师: 3570人学习过
12月25日,当人们还沉浸在圣诞的喜悦中无法自拔的时候
一款名为Wire Lurker的恶意软件让曾宣称安全可靠的苹
纽约时报报道, 加州的一所研究机构Palo Alto Networks
本书提供了.NET框架下C#编程的详尽指南。书中详细介绍了.NET框架中的核心概念、使用GDI+编写高级用户界面、多线程程序设计、使
51CTO旗下网站}

我要回帖

更多关于 oauth授权 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信