`
httpclient_bd
  • 浏览: 74367 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

预研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该值的注册地址为:https://developer.yahoo.com/dashboard/
oauth_consumer_secret:oauth_consumer_key对应的密钥。
oauth_signature_method: 请求串的签名方法,应用每次向OAUTH三个服务地址发送请求时,必须对请求进行签名。签名的方法有:HMAC-SHA1、RSA-SHA1与PLAINTEXT等三种。
oauth_signature: 用上面的签名方法对请求的签名。
oauth_timestamp: 发起请求的时间戳,其值是距1970 00:00: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 非法key
Invalid / expired Token 失效或者非法的token
Invalid signature 签名非法
Invalid / used nonce 非法的nonce

OAUTH认证授权就三个步骤,三句话可以概括:

1. 获取未授权的Request Token

2. 获取用户授权的Request Token

3. 用授权的Request Token换取Access Token

  OAUTH协议简介 收藏
   摘要: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版于2007年12月4日发布。通过官方网址:http://oauth.net可以阅读更多的相关信息。

二、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该值的注册地址为:https://developer.yahoo.com/dashboard/
oauth_consumer_secret:oauth_consumer_key对应的密钥。
oauth_signature_method: 请求串的签名方法,应用每次向OAUTH三个服务地址发送请求时,必须对请求进行签名。签名的方法有:HMAC-SHA1、RSA-SHA1与PLAINTEXT等三种。
oauth_signature: 用上面的签名方法对请求的签名。
oauth_timestamp: 发起请求的时间戳,其值是距1970 00:00: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 非法key
Invalid / expired Token 失效或者非法的token
Invalid 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访问用户授权的资源。
CODE:http://oauth.googlecode.com/svn/code/java
其他:http://kejibo.com/oauth/

分享到:
评论

相关推荐

    浅谈预研型项目管理.docx

    【预研型项目管理】是企业为应对未来市场不确定性,提前投入研发的一种策略。预研项目分为技术预研和产品预研,它们都是为了在市场竞争中抢占先机,通过探索新技术或新产品的可行性,为企业长远发展奠定基础。 一、...

    软件技术预研方案模板.docx

    《软件技术预研方案》是软件开发过程中至关重要的一步,它是对新技术或新方法进行探索和研究的蓝图,旨在确保项目的技术可行性,并为后续的软件开发阶段奠定基础。以下是基于提供的文档部分内容对软件技术预研方案的...

    QM-PROC-QMP-09-软件项目技术预研模板(软件技术预研报告模板)-V4.0.pdf

    软件项目技术预研模板知识点 技术预研是软件项目中一个重要的过程,它涉及到技术的评估、选择和实施。技术预研模板是指在软件项目中,用于指导技术预研活动的文档模板。 技术预研的目的 技术预研的目的是为了评估...

    项目管理技术预研报告模板

    《项目管理技术预研报告模板》是一份针对项目管理中技术预研阶段的重要参考资料,它旨在为项目团队提供一个清晰、规范的框架,以便于系统地进行技术预研工作,确保项目的顺利启动和实施。这份报告通常包含了项目背景...

    附录H-2 技术预研报告.doc

    《XXX 技术预研报告》是一份详细记录企业对新技术进行探索和研究的文档,旨在为公司的技术创新和未来市场定位提供科学依据。预研项目是企业为了应对未来的不确定性,尤其是面对潜在市场和技术发展趋势,而进行的一种...

    企业管理项目预研.ppt

    【企业管理项目预研】是企业或组织在开展大型项目前进行的一种重要准备工作,旨在降低风险、提高项目的成功率。预研管理涉及多个层面,包括技术、财务、人力资源等多个方面,尤其在国防项目中,预研更显得至关重要。...

    附录H-1 技术预研计划.doc

    《XXX技术预研计划》是项目管理中的一个重要文档模板,主要针对即将进行的技术探索和研究活动进行规划和安排。这份文档通常包含以下几个关键部分: 1. **技术预研目标**: - 这一部分需要清晰地定义技术预研的目标...

    XX集团技术发展处预研管理绩效指标.doc

    XX集团技术发展处的预研管理工作是其技术创新与研发的核心环节,旨在确保技术研究的高效进行,提升企业的竞争力。预研管理绩效指标是衡量这一工作成效的重要标准,它涵盖了任务绩效、经费管理、技术质量控制、成果...

    IT项目管理表单大全-技术预研篇(10个文档)

    本资源包——"IT项目管理表单大全-技术预研篇(10个文档)"提供了全面的工具和模板,帮助项目经理和团队高效地进行技术预研工作。 首先,技术预研是项目启动阶段的核心活动,通过这个过程,团队可以对新技术、新...

    项目管理(项目预研.pptx

    在现代国防项目管理中,项目预研阶段的重要性不言而喻。它不仅仅是一个技术准备阶段,更是为整个项目奠定理论和实践基础的关键过程。预研的成败在很大程度上决定了后续项目的可行性和最终成果的实用性。本文将深入...

    IMS终端预研,为移动终端技术论坛第一工作组就IMS终端相关功能的预研报告

    这份文件的编写是为了探讨和预研IMS终端的功能和相关问题,旨在为终端论坛的成员提供技术参考,以应对未来可能遇到的技术挑战,推动移动通信技术的发展。通过解决这些问题,可以确保终端设备能够支持IMS服务,满足...

    预研产品测试数据

    在IT行业中,预研产品测试数据是至关重要的一个环节,特别是在硬件产品的开发过程中。这个阶段主要目的是在产品正式推出之前,对产品性能进行评估和优化,确保产品在实际应用中的稳定性和可靠性。以下是对"预研产品...

    预研项目总结报告(模板).pdf

    预研项目总结报告(模板).pdf

    XX集团预研处预研管理绩效指标.doc

    XX集团预研处的预研管理工作是其科研发展的重要组成部分,其绩效指标主要分为任务绩效、项目管理和对外合作三大类,旨在确保预研项目的高效、高质量推进,促进科技成果的转化和应用,以及加强对外合作的成效。...

    企业管理技术预研.doc

    企业管理技术预研 企业管理技术预研是企业在进行技术创新、技术改进或技术引进时所进行的一系列活动的集合。其目的是为了确保技术的可行性、可靠性和安全性,从而提高企业的竞争力和市场份额。 技术预研规程是企业...

    软件项目技术预研报告.doc

    **软件项目技术预研报告**是项目管理中的关键文档,其主要目的是为项目干系人、决策者和团队成员提供关于技术预研活动的详细信息和结论,以便于制定明智的决策并规划项目的后续步骤。以下是对报告主要内容的详细解释...

    QM-TEMP-TPR-20-软件技术预研报告模板-V4.0.pdf

    【软件技术预研报告模板】是软件开发过程中一个至关重要的环节,它为项目的前期规划提供了必要的技术信息和决策依据。这份报告通常包含了对潜在技术的深入研究,旨在探索和评估新技术的可能性、适用性以及可能带来的...

    工作流引擎Activiti预研报告

    ### 工作流引擎Activiti预研报告 #### 一、引言 ##### 1.1 背景 随着企业信息化建设的不断深入和发展,业务流程自动化的需求日益凸显。工作流作为企业管理的重要组成部分,其高效性和灵活性对于提高企业的运作...

    云原生安全技术预研报告

    云原生安全技术预研的一些总结,比较全面加入了一些自己的想法

    企业管理项目预研管理.ppt

    《企业管理项目预研管理》是关于企业如何有效地进行项目启动和管理的专业培训资料,由国家项目管理认证专家、客座教授以及国际项目管理资质认证评估师沈建明讲解。该内容着重介绍了项目启动阶段的关键步骤,包括识别...

Global site tag (gtag.js) - Google Analytics