CODE大全
版权声明:本文为博主原创文章,未经博主允许不得转载。

HttpClient 认证机制 和 OAuth 认证

发布时间:『 2016-11-18 13:30』  博客类别:编程语言  阅读(1398) 评论(0)

HTTP 是一个应用层协议,使用非常广泛。java.net 包提供基本的通过 HTTP 协议访问资源的功能,但是它既不够灵活,功能也不是足够强大,不能满足现代 web 应用程序的需求。Apache Jakarta Commons HttpClient 使用最新的 HTTP 标准和规范,通过在客户端提供一个高效且功能丰富的包实现来填补这一空白。HttpClient 也被开源项目和商业软件产品广泛采用。    在本文中,我们将扩展 HttpClient 的认证模型。使用第三方 OAuth 库来添加 OAuth 认证。

认证机制

HttpClient 处理服务器认证几乎是透明的。只需要提供登录证书。但是,不同版本有所差异。

  • HttpClient v3.x

  • 证书存储在 HttpState 实例中,可以使用 setCredentials(AuthScope authscope, Credentials cred)getCredentials(AuthScope authscope) 方法设置或检索。建立在 HttpClient 上的自动授权可以禁用,使用 HttpMethod 类的 setDoAuthentication(boolean doAuthentication) 方法。更改只影响那个方法实例。        也支持先占式(Preemptive)基础认证功能,通过设置 setAuthenticationPreemptive(Boolean preemptive) 实现,但是 支持先占式基础服务。

  • HttpClient v4.x

  • 您应该实例化 CredentialProvider 来维护用户证书集,并为一个特定认证范围提供证书。通过将 CredentialProvider 添加到 HttpContext,这表示一个 HTTP 流程的执行状态,HttpClient 能够根据主机名、端口号和范围自动进行认证。        先占式认证不再以开箱即用的方式提供,滥用先占式认证可能引起用户证书泄漏。然而,如果您想要一个先占式认证,可以使用一个标准 HttpClient 扩展(比如协议拦截器)启用。

OAuth

OAuth 是一个开放的协议,以一种简单且标准的方法支持来自桌面和 web 应用程序的安全 API 授权。有了 OAuth,一个资源所有者可以授权第三方应用程序访问受保护的资源,而不损害用户证书。(OAuth 协议于 2007 年 10 月在版本 1.0 中确定,在 2009 年 6 月(修订版 A)进行改进。OAuth 2.0 规范正在开发之中。)

下图显示了典型的 three-legged OAuth dance。
OAuth 认证的10个步骤
   依照上图编号,当 OAuth three-legged 握手启动时:

  1. 客户为 OAuth 握手请求一个临时令牌。这个令牌用于维护握手会话。

  2. 确认了客户之后,服务器提供商颁发一个短期请求令牌。

  3. 客户发送一个 HTTP 重定向响应用户浏览器,然后将用户引导到服务供应商进行授权。

  4. 用户检查授权请求,并在服务提供商网站上授予客户访问权限(如果他信任该客户)。

  5. 服务器供应商确定授权,然后发送一个 HTTP 重定向来响应用户浏览器。

  6. 用户浏览器被重定向到客户回调 URL,在这里客户可以完成握手的其余部分。

  7. 客户使用上一步传递的验证器从服务提供商请求访问令牌。

  8. 成功确认之后,服务提供商颁发访问令牌来访问受保护资源。

  9. OAuth 握手完成之后,访问令牌颁发,客户可以使用这个访问令牌代表用户访问受保护的数据。

  10. 服务提供商验证每个到来的 OAuth 请求,如果客户被授权,就返回受保护资源。

当保护的 OAuth 资源被请求后,通常,客户端将得到一个 HTTP 401 的响应,包含一个 WWW-Authentication 头部:

WWW-Authenticate: OAuth realm=<your_realm>

WWW-Authentication 头部指出保护资源的认证模式。然后,HttpClient 可以根据 WWW-Authenticate 头部执行 OAuth 认证。

默认情况下,在 HttpClient 中仅支持基础认证、摘要认证和 NTLM 认证。使用 HttpClient 进行 OAuth 认证 介绍如何在 HttpClient 模式下添加和使用 OAuth 认证。

添加一个自定义的认证模式

除了原生支持基础、摘要和 NTLM 认证之外,HttpClient 有一个机制来插入自定义的额外认证模式,使用 AuthScheme 接口。要使用一个定制的认证模式: 

  1. 实现 AuthScheme 接口。

  2. 使用 AuthPolicy.registerAuthScheme() 注册自定义的 AuthScheme 。

  3. 在 AuthPolicy.AUTH_SCHEME_PRIORITY 首选项中包含这个自定义的 AuthScheme。


——— 全文完 ———
如有版权问题,请联系532009913@qq.com。
关键字:   HttpClient     OAuth     第三方认证     CredentialProvider     OAuthCredentials  
评论信息
暂无评论
发表评论
验证码: 
Powered by CODE大全 | 鄂ICP备14009759号-2 | 网站留言 Copyright © 2014-2016 CODE大全 版权所有