OAuth 2.0系列教程(五) 授权

原文地址:http://tutorials.jenkov.com/oauth2/authorization.html

作者:Jakob Jenkov   译者:林浩    校对:郭蕾

当一个客户端应用想要访问拥有者托管在资源服务器的资源时,它必须先获得授权,本节将讲述客户端如何获取授权。

客户端标识,客户端密钥和重定向URI

在客户端应用能请求访问资源服务器的资源之前,客户端应用程序,必须先在资源服务器相关联的授权服务器中进行注册。

注册一个一次性的任务。一旦注册了,除非客户端注册被取消了,注册将持续有效。

注册后客户端应用将由授权服务器分配客户端标识和密钥。在授权服务器上,客户端标识和密钥是唯一标识客户端应用的。如果客户端应用注册了多个授权服务器(如Facebook, Twitter和Google等),每一个授权服务器将发出唯一的标识给该客户端应用。

无论什么时候客户端应用,想要访问同样资源服务器上的资源,它都需要通过发送客户端标识和密钥到授权服务器来验证自己。

在注册过程中,客户端应用也注册了一个重定向URI,当资源拥有者授权给客户端应用时,该重定向URI会被使用。当资源拥有者成功的通过授权服务器授权给客户端应用时,资源拥有者被重定向回客户端应用,再跳转到该重定向URI。

  • 授权批准

授权批准由资源服务器,及与其相关的授权服务器,给予客户端应用。

OAuth 2.0列举四种不同类型授权批准,每一种类型都有不同的安全特性。这些授权批准类型为:

  • 授权码
  • 契约
  • 资源拥有者密钥证书
  • 客户端证书

每种授权批准在下文都会提到。

授权码

用授权码来授权批准原理如下:资源拥有者(用户)访问客户端应用。客户端应用告诉用户通过授权服务器(如Facebook, Google和Twitter等)来登录到客户端应用。

为了通过授权服务器登录,用户通过客户端应用被重定向到授权服务器。客户端应用发送它的客户端标识给授权服务器,那么授权服务器就知道是哪个应用尝试访问受保护的资源。当被重定向回客户端应用时,授权服务器发送给用户特定的重定向URI,  即客户端已经提前与授权服务器注册。随着重定向,授权服务器发送一个代表授权的授权码。

当在客户端应用的重定向URI被访问时,客户端应用直接连接授权服务器。客户端应用发送授权码,客户端标识及密钥,如果客户端应用能接受这些值,那么授权服务器返回一个访问令牌。

现在客户端应用就可以用该访问令牌请求资源服务器的资源了。该访问令牌可作为客户端授权和授权访问资源。

下面是当用授权码授权客户端应用时的授权过程:


通过授权码授权

契约

契约授权类似于授权码授权,除了用户完成授权后,访问令牌返回给客户端应用外。当用户代理被重定向到重定向URI时,访问令牌因此被返回。

当然这意味着访问令牌可以被用户代理访问,或者在契约授权过程中参与的原生应用。访问令牌在web服务器上不是安全存储的。

进一步说,客户端应用可以只发送它的客户端标识给授权服务器。如果客户端也发送它的密钥,那么客户端密钥将不得不保存在用户代理或原生应用里,那将使它很容易被破解。

契约授权大多数用在用户代理或原生应用中。用户代理或原生应用将收到来授权服务器的访问令牌。

下面是阐释契约授权的图:


契约授权

资源拥有者密钥证书

资源拥有者证书授权方法通过客户端应用访问资源拥有者证书来工作。比如,用户可以在客户端应用输入他的Twitter用户名及密钥(证书)。该客户端应用就可以用着用户名和密钥访问用户在Twitter的资源。

用资源拥有者密钥证书要求客户端应用很多信任。你不想在那些你怀疑会滥用证书的客户端应用中输入证书。

资源拥有者密钥证书通常被用在用户代理或原生应用中。

客户端证书

客户端证书授权对于客户端需要在资源服务器访问资源或调用函数的情形使用,与特定的资源拥有者无关(如用户)。比如,从Foursquare获取场地列表,这并没有必要通过某个Foursquare用户才能做。

时间: 2024-10-29 20:50:30

OAuth 2.0系列教程(五) 授权的相关文章

OAuth 2.0系列教程

OAuth(开放授权)是一个开放标准,允许用户让第三方应用访问该用户在某一网站上存储的私密的资源(如照片,视频,联系人列表),而无需将用户名和密码提供给第三方应用. OAuth允许用户提供一个令牌,而不是用户名和密码来访问他们存放在特定服务提供者的数据.每一个令牌授权一个特定的网站(例如,视频编辑网站)在特定的时段(例如,接下来的2小时内)内访问特定的资源(例如仅仅是某一相册中的视频).这样,OAuth让用户可以授权第三方网站访问他们存储在另外服务提供者的某些特定信息,而非所有内容. OAuth

黄聪:Microsoft Enterprise Library 5.0 系列教程(五) Data Access Application Block

原文:黄聪:Microsoft Enterprise Library 5.0 系列教程(五) Data Access Application Block 企业库数据库访问模块通过抽象工厂模式,允许用户通过简单的配置选择不同的数据库作为程序的数据源,大大解决了切换数据库时带来的麻烦.因为我本机只安装了SQL Server 2005,所以在此只做SQL的演示,需要深究的朋友可以访问以下网站: http://msdn.microsoft.com/en-us/library/ff664408%28v=P

OAuth 2.0系列教程(四) 客户端类型

原文地址:http://tutorials.jenkov.com/oauth2/client-types.html 作者:Jakob Jenkov   译者:林浩    校对:郭蕾 OAuth 2.0客户端角色被细分为一系列类型和配置,本节将阐述这些类型和配置. OAuth 2.0规范定义了两种客户端类型: 保密的 公有的 保密的客户端能够对外部保持客户端密码保密.该客户端密码是由授权服务器分配给客户端应用的.为了避免欺骗,该密码是授权服务器用来识别客户端的.例如一个保密的客户端可以是web应用

OAuth 2.0系列教程(三) 角色

原文地址:http://tutorials.jenkov.com/oauth2/roles.html 作者:Jakob Jenkov   译者:林浩    校对:郭蕾 OAuth 2.0为用户和应用定义了如下角色: 资源拥有者 资源服务器 客户端应用 授权服务器 这些角色在下图中表示为: OAuth 2.0规范中的角色定义 资源拥有者是指拥有共享数据的人或应用.比如Facebook或者Google的用户就是是资源拥有者,他们拥有的资源就是他们的数据.资源拥有者在上图中被描述为人,这也是最常见的情

OAuth 2.0系列教程(六) 端点

OAuth 2.0定义了一系列端点.端点典型的就是web服务器上的URI.比如,一个Java Servlet, JSP page, PHP page, ASP.NET网页等等. 这些端点定义有: 授权端点 令牌端点 重定向端点 授权端点和令牌端点都位于授权服务器上,重定向端点位于客户端应用上.每个端点都会在下面讲述. 这些端点在下图中阐释为: OAuth 2.0端点 OAuth 2.0规范没有描述这些端点怎么被发现或记录.这取决于实现者来决定.大多数网站都有一个子网站开发人员来记录这些端点. 授

OAuth 2.0系列教程(七) 请求和响应

当客户端应用请求授权和访问令牌时,它发送http请求到授权服务器,同它的授权和令牌端点.被发送来回的请求和响应取决于授权类型.记住,这四种授权类型: 授权码授权 契约授权 资源拥有者密钥证书授权 客户端证书授权 每一种授权类型的请求和响应的更多细节将在下文分开地阐释. 然而,下面讲述的信息大多只是一个总结.为了得到它们更多的细节描述,你可能不得不查询OAuth 2.0规范,或者你尝试集成的系统(如Facebook, Google, Twitter, Foursquare等)文档. 转载自 并发编

OAuth 2.0系列教程(八) 授权码授权

原文地址:http://tutorials.jenkov.com/oauth2/authorization-code-request-response.html 作者:Jakob Jenkov   译者:林浩    校对:郭蕾  授权码授权总共由2个请求和2个响应组成.一个授权请求+响应,和一个令牌请求+响应. 授权请求 授权请求被发送到授权端点以获取一个授权码.这是请求中用到的参数: response_type 必须.必须被设置到代码里 client_id 必须.当客户端被注册时,授权服务器要

OAuth 2.0系列教程(十) 资源拥有者密钥证书授权请求和响应

资源拥有者者密钥证书授权包含单个的请求+响应. 资源拥有者密钥证书授权请求 请求包含下面的参数: grant_type 必须.必须设置到密码中. username 必须.UTF-8编码的资源拥有者用户名. password 必须.UTF-8编码的资源拥有者密码. scope 可选.授权的作用域. 资源拥有者密钥证书授权响应 响应是包含访问令牌的JSON结构数据.JSON结构像这样: { "access_token" : "...", "token_type

OAuth 2.0系列教程(九) 契约请求和响应

原文地址:http://tutorials.jenkov.com/oauth2/implicit-request-response.html 作者:Jakob Jenkov   译者:林浩    校对:郭蕾 契约请求和响应 契约授权包含一个请求和一个响应. 契约授权请求 契约授权请求包含下面的参数: response_type 必须.必须被设置在令牌中. client_id 必须.当客户端被注册时,有授权服务器分配的客户端标识. redirect_uri 可选.由客户端注册的重定向URI. sc