oauth token为什么需要在头里写tokeng

其他(10)
摘要:OAUTH协议为用户资源的授权提供了一个安全的、开放而又简易的标准。与以往的授权方式不同之处是OAUTH的授权不会使第三方触及到用户的帐号信息(如用户名与密码),即第三方无需使用用户的用户名与密码就可以申请获得该用户资源的授权,因此OAUTH是安全的。同时,任何第三方都可以使用OAUTH认证服务,任何服务提供商都可以实现自身的OAUTH认证服务,因而OAUTH是开放的。业界提供了OAUTH的多种实现如PHP,JavaScript,Java,Ruby等各种语言开发包,大大节约了程序员的时间,因而OAUTH是简易的。目前互联网很多服务如Open
API,很多大头公司如Google,Yahoo,Microsoft等都提供了OAUTH认证服务,这些都足以说明OAUTH标准逐渐成为开放资源授权的标准。
  一、OAUTH产生的背景
  典型案例:如果一个用户拥有两项服务:一项服务是图片在线存储服务A,另一个是图片在线打印服务B。如下图所示。由于服务A与服务B是由两家不同的服务提供商提供的,所以用户在这两家服务提供商的网站上各自注册了两个用户,假设这两个用户名各不相同,密码也各不相同。当用户要使用服务B打印存储在服务A上的图片时,用户该如何处理?法一:用户可能先将待打印的图片从服务A上下载下来并上传到服务B上打印,这种方式安全但处理比较繁琐,效率低下;法二:用户将在服务A上注册的用户名与密码提供给服务B,服务B使用用户的帐号再去服务A处下载待打印的图片,这种方式效率是提高了,但是安全性大大降低了,服务B可以使用用户的用户名与密码去服务A上查看甚至篡改用户的资源。
  很多公司和个人都尝试解决这类问题,包括Google、Yahoo、Microsoft,这也促使OAUTH项目组的产生。OAuth是由Blaine Cook、Chris Messina、Larry Halff 及David Recordon共同发起的,目的在于为API访问授权提供一个开放的标准。OAuth规范的1.0版于日发布。通过官方网址:&可以阅读更多的相关信息。
  二、OAUTH简介
  在官方网站的首页,可以看到下面这段简介:
  &An open protocol to allow secure API authorization in a simple and standard method from desktop and web applications.
  大概意思是说OAUTH是一种开放的协议,为桌面程序或者基于BS的web应用提供了一种简单的,标准的方式去访问需要用户授权的API服务。OAUTH类似于Flickr Auth、Google's AuthSub、Yahoo's BBAuth、 Facebook Auth等。OAUTH认证授权具有以下特点:
  1. 简单:不管是OAUTH服务提供者还是应用开发者,都很容易于理解与使用;
  2. 安全:没有涉及到用户密钥等信息,更安全更灵活;
  3. 开放:任何服务提供商都可以实现OAUTH,任何软件开发商都可以使用OAUTH;
  三、OAUTH相关术语
  在弄清楚OAUTH流程之前,我们先了解下OAUTH的一些术语的定义:
OAUTH相关的三个URL:
Request Token URL: 获取未授权的Request Token服务地址;User Authorization URL: 获取用户授权的Request Token服务地址;Access Token URL: 用授权的Request Token换取Access Token的服务地址;
OAUTH相关的参数定义:&
oauth_consumer_key: 使用者的ID,OAUTH服务的直接使用者是开发者开发出来的应用。所以该参数值的获取一般是要去OAUTH服务提供商处注册一个应用,再获取该应用的oauth_consumer_key。如Yahoo该值的注册地址为:oauth_consumer_secret:oauth_consumer_key对应的密钥。oauth_signature_method: 请求串的签名方法,应用每次向OAUTH三个服务地址发送请求时,必须对请求进行签名。签名的方法有:HMAC-SHA1、RSA-SHA1与PLAINTEXT等三种。oauth_signature: 用上面的签名方法对请求的签名。oauth_timestamp: 发起请求的时间戳,其值是距:00 GMT的秒数,必须是大于0的整数。本次请求的时间戳必须大于或者等于上次的时间戳。oauth_nonce: 随机生成的字符串,用于防止请求的重放,防止外界的非法攻击。oauth_version: OAUTH的版本号,可选,其值必须为1.0。
  OAUTH HTTP响应代码:&
HTTP 400 Bad Request 请求错误
Unsupported parameter 参数错误Unsupported signature method 签名方法错误Missing required parameter 参数丢失Duplicated OAuth Protocol Parameter 参数重复
HTTP 401 Unauthorized 未授权
Invalid Consumer Key 非法keyInvalid / expired Token 失效或者非法的tokenInvalid signature 签名非法Invalid / used nonce 非法的nonce
  四、OAUTH认证授权流程
  在弄清楚了OAUTH的术语后,我们可以对OAUTH认证授权的流程进行初步认识。其实,简单的来说,OAUTH认证授权就三个步骤,三句话可以概括:
  1. 获取未授权的Request Token
  2. 获取用户授权的Request Token
  3. 用授权的Request Token换取Access Token
  当应用拿到Access Token后,就可以有权访问用户授权的资源了。大家肯能看出来了,这三个步骤不就是对应OAUTH的三个URL服务地址嘛。一点没错,上面的三个步骤中,每个步骤分别请求一个URL,并且收到相关信息,并且拿到上步的相关信息去请求接下来的URL直到拿到Access Token。具体的步骤如下图所示:
&具体每步执行信息如下:
  A. 使用者(第三方软件)向OAUTH服务提供商请求未授权的Request Token。向Request Token URL发起请求,请求需要带上的参数见上图。
  B. OAUTH服务提供商同意使用者的请求,并向其颁发未经用户授权的oauth_token与对应的oauth_token_secret,并返回给使用者。
  C. 使用者向OAUTH服务提供商请求用户授权的Request Token。向User Authorization URL发起请求,请求带上上步拿到的未授权的token与其密钥。
  D. OAUTH服务提供商将引导用户授权。该过程可能会提示用户,你想将哪些受保护的资源授权给该应用。此步可能会返回授权的Request Token也可能不返回。如Yahoo OAUTH就不会返回任何信息给使用者。
  E. Request Token 授权后,使用者将向Access Token URL发起请求,将上步授权的Request Token换取成Access Token。请求的参数见上图,这个比第一步A多了一个参数就是Request Token。
  F. OAUTH服务提供商同意使用者的请求,并向其颁发Access Token与对应的密钥,并返回给使用者。
  G. 使用者以后就可以使用上步返回的Access Token访问用户授权的资源。
  从上面的步骤可以看出,用户始终没有将其用户名与密码等信息提供给使用者(第三方软件),从而更安全。用OAUTH实现背景一节中的典型案例:当服务B(打印服务)要访问用户的服务A(图片服务)时,通过OAUTH机制,服务B向服务A请求未经用户授权的Request Token后,服务A将引导用户在服务A的网站上登录,并询问用户是否将图片服务授权给服务B。用户同意后,服务B就可以访问用户在服务A上的图片服务。整个过程服务B没有触及到用户在服务A的帐号信息。如下图所示,图中的字母对应OAUTH流程中的字母:
  五、OAUTH服务提供商
  OAUTH标准提出到现在不到两年,但取得了很大成功。不仅提供了各种语言的版本库,甚至Google,Yahoo,Microsoft等等互联网大头都实现了OAUTH协议。由于OAUTH的client包有很多,所以我们就没有必要在去自己写,避免重复造轮子,直接拿过来用就行了。我使用了这些库去访问Yahoo OAUTH服务,很不错哦!下面就贴出一些图片跟大家一起分享下!
  下图是OAUTH服务提供商引导用户登录(若用户开始没有登录)
  下图是提示用户将要授权给第三方应用,是否同意授权的页面
  下图提示用户已授权成功的信息
  一些服务提供商不仅仅仅实现了OAUTH协议上的功能,还提供了一些更友好的服务,比如管理第三方软件的授权服务。下图就是YAHOO管理软件授权的页面,用户可以取消都某些应用的授权。
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:149139次
积分:1747
积分:1747
排名:第16122名
原创:24篇
转载:34篇
评论:15条
(1)(1)(1)(3)(1)(4)(12)(3)(20)(11)(1)<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
您的访问请求被拒绝 403 Forbidden - ITeye技术社区
您的访问请求被拒绝
亲爱的会员,您的IP地址所在网段被ITeye拒绝服务,这可能是以下两种情况导致:
一、您所在的网段内有网络爬虫大量抓取ITeye网页,为保证其他人流畅的访问ITeye,该网段被ITeye拒绝
二、您通过某个代理服务器访问ITeye网站,该代理服务器被网络爬虫利用,大量抓取ITeye网页
请您点击按钮解除封锁&登录那些事儿 - CNode技术社区
(/JerryC8080)
也不知道是什么原因,刚开始不久的职业生涯,在技术这条路走着走着,和「登录」总是有着一个不解之缘。还记得当初学习Web编程的时候么?不管是Java、.Net、PHP,继经典「Hello World」之后,要写的很有可能就是「登录」功能。至今「登录」的问题还是让我心中一万只草泥马奔过。
下面,给分享一下各种「登录」相关的需求
普通的登录
这个是极其普通的登录需求,要的就是一个登录页面,输入账号密码,提交Form表单,后端查询数据库对应用户名的密码,匹配正确则把用户记录到Session,不正确则返回错误。
这种登录,在上学的时候,也许敬爱的老师就已经教过你了。
但可能他没有教你的是,密码需要hash加密,session为什么可以记录登录用户的原理。
密码hash,就是存进数据库的密码是一串密文,密文是明文密码通过不可逆算法得出的。在Nodejs中,你可以使用,它提供了hash以及对应的compare方法,非常适合用于密码的加密和对比。
Session原理
Session的原理其实还是依赖了Cookie,所以Cookie才是记录用户凭证的真理。它的原理大概是酱紫的:服务器端维护一个session的表,这个表的每一条记录存的就是与某一个客户端的会话,会话会有过期时间,过期的会话会被清理。然后这个会话,会有一个对应的id,一般是一串长长的看不懂的字符串,然后这个字符串会被存储在客户端的cookie中,每一次请求服务器端都会带上这个cookie,服务器端就知道访问的就是哪个客户端了。
欲知更多有关「Session原理」请点击传送门:
使用独立登录系统
应项目需要,登录逻辑需要独立出来做成一个系统,就是另外一个项目。与原来的主站不是在同一个项目中了。一个域名是 ,一个则是了。要在不同的域名下进行登录,一般的方法是/login 跳转到 /login,passport这边是一个登录页面,用户输入账号密码登录成功之后,passport会通过带着一个可逆加密的包含用户信息的token,重定向到提供的回调处理地址,然后进行解密,匹配正确,则登录用户。
要注意的是,这里的加密的信息需要包含一个时间戳,接收方需要认证这个时间戳,过期登录失败。避免token被窃取,被无限登录site系统。
单点登录需要实现的需求,说白了就是在站点A的登录了,那么用户就自动在站点B、站点C、站点E、F、G登录。
这又分两种情况,A站点和B站点是否在同一个二级域名下。
假如是在同一个域名下,例如与,因为cookie允许设置到二级域名下.,所以siteA和siteB是可以共享cookie的,用户的信息可以通过可逆加密放在二级域名下的cookie,并且设置http only,就可以一站登录,站站登录。
而如果A站点和B站点不在同一二级域名下,例如与,他们就无法通过共享cookie的方式共享用户信息,所以需要用到jsonp的方式,用户在siteA登录之后,提供一个jsonp接口获取加密的用户信息,siteB访问这个jsonp获取加密信息。达到共享用户状态的效果。
欲知更多有关「单点登录」请点击传送门:
OAuth2.0登录
这就比较普遍了,现在随随便便做个网站,都接入「微信登录」、「微博登录」、「豆瓣登录」、「QQ登录」、「Github登录」、@^&@%#^%^@%&%@&#…
这些统一叫做:「第三方登录」。
第三方登录都是实现了OAuth2.0协议的,流程大概是酱紫的:
第三方提供一个登录入口,也就是第三方域名下的登录页面。主站需要登录的时候,引导用户重定向到第三方的登录页面,用户输入账号密码之后,登录第三方系统,第三方系统匹配帐号成功之后,带上一个code到主站的回调地址,主站接收到code,短时间内拿着code请求第三方提供获取长期凭证的接口(因为code有一个比较短的过期时间),这个长期凭证叫access_token,获取之后就把这个access_token存到数据库中,请求一些第三方提供的API,需要用到这个access_token,因为这个token就是记录用户在第三方系统的一个身份凭证。
一些系统,在获取access_token的时候,还会返回一个副参数refresh_token,因为access_token是有过期时间的,一旦过期了,主站可以使用refresh_token请求第三方提供的接口获取新的access_token以及新的refresh_token。
在Nodejs中,你可以使用passport来给第三方登录提供一个统一解决方案,而如果你是开发「微信公众号」授权,除了,也可以使用
其实登录问题,理解了Session原理是很重要的,这个也不难理解。然后站点之间的用户信息交流,就是通过各种跨域限制,各种加密解密而已。在做这个的时候,需要充分考虑到加密的token是否会被窃取的可能性,还要考虑让这个token加上时间的验证,在一些可能会被窃取,安全需求比较高的情况,就需要把token的时间设置的更短。还有就是加密的方式需要依照需求不同而选择可逆或者不可逆,hash sha1还是JWT(Json Web Token)。
sha1加密,可以使用Nodejs自带的crypto,JWT可以使用
如果本文对您有用
请不要吝啬你们的Follow与Start
这会大大支持我们继续创作
「Github」
MZMonster :
JC_Huang :
MZMonster:
JC_Huang:
自豪地采用
mark, 想要尝试做第三方登录.
还有一种,不需要密码,直接填写邮件地址,点击邮件链接返回对应的访问。俺喜欢这么干。
那岂不是每一次登录,都要打开自己的邮箱?
现在流行扫码登录或者手机验证码登录
顶,登录确实不简单
正在尝试服务端实现oauth2.0
来自炫酷的
正好复习一下,谢谢
这就比较普遍了,现在随随便便做个网站,都接入「微信登录」、「微博登录」、「豆瓣登录」、「QQ登录」、「Github登录」、@^&@%#^%^@%&%@&#…
提到这个我就想起了豆瓣,为什么豆瓣FM登录之后,还要再在.com上重新输入一次用户名密码呢。。。
也可以设置一个到期的时间嘛,而且如果要求登陆的话,邮件链接是设置短一点时间比如10分钟不登录就失效等等。如果你的机器被控制或者邮箱被控制,网站做啥都白扯不是。
自豪地采用
楼主总结的比较全面。普通登陆,仅供学习- -内部系统的话,单点登陆和独立登陆都可以。外部接入,比如wechat、weibo,Oauth2.0就是主流了~
自豪地采用
自豪地采用
JWT 有完整的例子吗? 和 bcryptjs 加密有什么区别 没搞懂
CNode 社区为国内最专业的 Node.js 开源技术社区,致力于 Node.js 的技术研究。
服务器赞助商为
,存储赞助商为
,由提供应用性能服务。
新手搭建 Node.js 服务器,推荐使用无需备案的您现在的位置: -->
--> OAuth那些事儿
OAuth那些事儿
&&&&英国诗人蒲柏在牛顿的墓志铭中写道:“自然和自然的法则在黑暗中隐藏,上帝说,让牛顿去吧,于是一切都被照亮!”,而在保护账号安全方面,起着如同牛顿般中流砥柱的作用,为什么这么说呢?先让我们看一个例子:
&&&&人人网提供了导入MSN联系人的功能,但前提是用户必须提供账号密码,如下图所示:
查找你的MSN联系人中有谁在人人网上
&&&&人人网信誓旦旦的宣称不会记录你的密码,它甚至提供了一个所谓保证账号安全的方法:先改密码再导入,成功后再改为原密码。不过这样做就安全了么?
什么是OAuth
&&&&如今很多网站的功能都强调彼此间的交互,因此我们需要一种简单,标准的解决方案来安全的完成应用的授权,于是,OAuth应运而生,看看官网对其的定义:
&&&&An open protocol to allow secure API authorization in a simple and standard method from desktop and web applications.
&&&&一个典型的OAuth应用通常包括三种角色,分别是:Consumer:消费方Service Provider:服务提供者User:用户
&&&&用户好理解,不必多言,消费方和服务提供者则需要解释一下,举例来说:假设我们做了一个SNS,它有一个功能,可以让会员把他们在Google上的联系人导入到SNS上,那么此时的消费方就是SNS,而服务提供者则是Google。
&&&&注:支持。
&&&&消费方如果想使用服务提供者的OAuth功能,通常需要先申请两样东西:Consumer KeyConsumer Secret
&&&&当消费方生成签名的时候,会用到它们。
&&&&一个典型的OAuth流程通常如下图所示:
OAuth流程图A:消费方请求Request TokenB:服务提供者授权Request TokenC:消费方定向用户到服务提供者D:获得用户授权后,服务提供者定向用户到消费方E:消费方请求Access TokenF:服务提供者授权Access TokenG:消费方访问受保护的资源
&&&&基本就是用Request Token换取Access Token的过程。这里需要注意的是,对服务提供者而言,Request Token和Access Token的生命周期不一样,通常,Request Token的生命周期很短,一般在一个小时以内,这样相对安全一些;而Access Token的生命周期很长,往往是无限,如此一来,消费方就可以把它保存起来,以后的操作就无需用户再授权了,即便用户修改账号密码,也不会受影响,当然,用户可以废除消费方的授权。
有腿的OAuth
&&&&我们前面描述的OAuth,被称为三条腿的OAuth(3-Legged OAuth),这也是OAuth的标准版本。这里所谓的“三条腿”,指的是授权过程中涉及前面提到的三种角色,也就是:消费方,服务提供者,用户。不过有些情况下,不需要用户的参与,此时就产生了一个变体,被称作两条腿的OAuth(2-Legged OAuth),一般来说,访问私有数据的应用需要三条腿的OAuth,访问公共数据的应用需要两条腿的OAuth。
&&&&两条腿的OAuth和三条腿的OAuth相比,因为没有用户的参与,所以在流程中就不会涉及用户授权的环节,也就不需要使用Token,而主要是通过Consumer Key和Consumer Secret来完成签名的,此时的Consumer Key和Consumer Secret基本等价于账号和密码的作用。
&&&&日发布了:
&&&&此版本的协议存在严重的安全漏洞:,更详细的介绍可以参考:。
&&&&日发布了:
&&&&此版本的协议修复了前一版本的安全漏洞,并成为,我们现在使用的OAuth版本多半都是以此版本为基础。
&&&&OAuth的未来:,…
OAuth和OpenID的区别
&&&&OAuth关注的是;而OpenID侧重的是。从表面上看,这两个英文单词很容易混淆,但实际上,它们的含义有本质的区别:authorization: n. 授权,认可;批准,委任authentication: n. 证明;鉴定;证实
&&&&OAuth关注的是授权,即:“用户能做什么”;而OpenID关注的是证明,即:“用户是谁”。
&&&&如果混淆了OAuth和OpenID的含义,后果很严重。以国内某网站开发的应用为例:它的功能是通过OAuth授权让新浪微博和豆瓣的用户使用各自的身份发表评论,如下图所示:
错误的把OAuth当做OpenID使用
&&&&此类应用属于身份证明问题,本应该通过OpenID来实现,但因为错误的使用了OAuth,从而带来安全隐患:设想一下用户只是在网站上发表了评论而已,但却赋予了网站随意操作自己私有数据的权利!这就好比:快递员送包裹,为了证明收件人的身份,原本你只要给他看一下身份证即可,可你却把防盗门钥匙都给他了!Oh,My God!
&&&&收工!作为首尾呼应的结束语,请允许我套用蒲柏的话:“账号和账号的安全在黑暗中隐藏,上帝说:让OAuth去吧,于是一切都被照亮!”,不过这可不是墓志铭
&&&&BTW:关于OAuth详细的介绍可以参考。
觉得文章有用?立即:
和朋友一起 共学习 共进步!
建议继续学习:
QQ技术交流群:,欢迎加入!
扫一扫订阅我的微信号:IT技术博客大学习
作者:&&&&来源:
发布时间: 22:18:51
建议继续学习
近3天十大热文
rightLowest
& 2009 - 2016<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
您的访问请求被拒绝 403 Forbidden - ITeye技术社区
您的访问请求被拒绝
亲爱的会员,您的IP地址所在网段被ITeye拒绝服务,这可能是以下两种情况导致:
一、您所在的网段内有网络爬虫大量抓取ITeye网页,为保证其他人流畅的访问ITeye,该网段被ITeye拒绝
二、您通过某个代理服务器访问ITeye网站,该代理服务器被网络爬虫利用,大量抓取ITeye网页
请您点击按钮解除封锁&}

我要回帖

更多关于 oauth2.0 token过期 的文章

更多推荐

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

点击添加站长微信