在eclipse开发环境中使用Java搭建OAuth Server和OAuth Client

来源:互联网 发布:妮维雅 防晒 知乎 编辑:程序博客网 时间:2024/05/15 04:51

1. OAuth协议

OAuth协议是各类开放平台验证第三方应用程序权限的常用方法。在此不多做解释,详情见百度百科

 

2. 资源介绍

我们借助Google Code上的开源项目(下载地址:http://code.google.com/p/oauth/ ) 来搭建OAuth服务器和客户端,首先使用SVNJava部分的代码checkout。这个项目是使用Maven进行管理的,对于俺这个没怎么用过Maven的屌丝猿来说,着实吃了不少苦头~

 

2014-4-1时,检出的内容结构如下:

 

其中:

core目录下为OAuth中几个核心包的实现 (注:这里实现的是OAuth 1.0)

core-old目录下为OAuth中核心包的旧版本实现

如果你不关注OAuth协议的实现细节,尽可以忽略这两个包

example目录里面提供了OAuth实例(包括:服务器、桌面客户端、WebApp客户端等)

其他的目录和文件不做介绍。

我们重点关注example中的内容,其中:

 

Oauth-provider 为 OAuth服务器部分

Desktop 为OAuth桌面应用方式的客户端

Webapp OAuth Web应用方式的客户端

 

3. 服务器端

下面阐述服务器端的搭建过程(我使用的eclipse版本为Eclipse Java EE IDE for Web Developers. Version: Helios Service Release 2)

1. 创建一个Dynamic Web Project (假设名称为OAuthServer)

2. 打开oauth-provider目录下的如下目录: oauth-provider\src\net\oauth\example\provider,中间有两个文件夹:coreservlets

3. 在OAuthServer的src目录下创建包:net.oauth.example.provider.core,然后将步骤2中打开的目录下core目录中的文件放在此包下

4. 在OAuthServersrc目录下创建包:net.oauth.example.provider.servlets,然后将步骤2中打开的目录下servlets目录中的文件放在此包下

5. 回到oauth-provider\web目录,并将中间的文件复制到与OAuthServerWebContent(可能为其他名字)下的对应位置

6. 自行消灭各类BUG,如Build Path没有全部加入、Java版本不对等问题

7. 至此,OAuth的服务器端搭建完毕

说明:根据OAuthServer的配置文件web.xml,可以找到OAuth授权过程中的三个URL,以及一个用来测试的/echo地址。

4. 桌面应用客户端

下面阐述桌面应用客户端的搭建过程

1. 创建一个Java Project(假设名称为OAuthClientDesktop)

2. 打开desktop目录下的目录 desktop\src\main\java

3. 在OAuthClientDesktopsrc目录下创建包:com.centerkey.utils,并将desktop\src\main\java\com\centerkey\utils下的文件复制到该包下

4. 在OAuthClientDesktopsrc目录下创建包:net.oauth.example.desktop,并将desktop\src\main\java\net\oauth\example\desktop\DesktopClient.java文件复制到该包下

5. 在OAuthClientDesktop项目中创建lib文件夹,并将 OAuth\example\oauth-provider\web\WEB-INF\lib OAuth\lib 两个文件夹下的jar包放在该文件夹中,将lib文件夹中的所有jar包放在OAuthClientDesktop工程的build path

6. 在net.oauth.example.desktop包中创建类 SampleClient,并编写其实现代码如下:

[java] view plaincopy在CODE上查看代码片派生到我的代码片
  1. package net.oauth.example.desktop;  
  2.   
  3. import net.oauth.OAuth;  
  4. import net.oauth.OAuthConsumer;  
  5. import net.oauth.OAuthMessage;  
  6. import net.oauth.OAuthServiceProvider;  
  7. import net.oauth.client.OAuthClient;  
  8. import net.oauth.client.httpclient4.HttpClient4;  
  9.   
  10. public class SampleClient {  
  11.   
  12.     public static void main(String[] args) throws Exception {  
  13.         final OAuthServiceProvider provider = new OAuthServiceProvider(  
  14.                 "http://localhost:8080/OAuthServer/request_token",  
  15.                 "http://localhost:8080/OAuthServer/authorize",  
  16.                 "http://localhost:8080/OAuthServer/access_token");  
  17.         final OAuthConsumer consumer = new OAuthConsumer(null // callback URL  
  18.                 , "myKey" // consumer key  
  19.                 , "mySecret" // consumer secret  
  20.                 , provider);  
  21.         final String serviceURL = "http://localhost:8080/OAuthServer/echo";  
  22.         final DesktopClient client = new DesktopClient(consumer);  
  23.         client.setOAuthClient(new OAuthClient(new HttpClient4()));  
  24.         OAuthMessage result = client.access(OAuthMessage.GET, serviceURL //  
  25.                 , OAuth.newList());  
  26.         System.out.println(result.readBodyAsString());  
  27.     }  
  28.   
  29. }  


其中涉及到的四个URLOAuthServiceProvider 和 serviceURL 按实际情况改写

 

5. 测试

1. 启动服务器端的OAuthServer

2. 运行OAuthClientDesktop工程(启动函数为SampleClient中的main函数)

3. 按引导进行授权:运行OAuthClientDesktop后会弹出如下授权页,填写UserId并点Authorize即可完成授权

 

 

6. 服务器端按逻辑需求修改

为达到身份验证的目的,服务器端应该对用户在网页里输入的内容进行验证,修改OAuthServer中的相关逻辑即可:

OAuthServer中的AuthorizationServlet类中修改逻辑:

扩展该类的doPost方法,将if(userId == null)改成自己的逻辑即可。

 

7. Web应用客户端

下面阐述Web应用客户端的搭建过程

1. 创建Dynamic Web Project(假设名称为OAuthClientWebapp)

2. 在src目录下新建包net.oauth.example.consumer.webapp并将OAuth\example\webapp\src\main\java\net\oauth\example\consumer\webapp目录下的文件复制到该包中

3. 将OAuth\example\webapp\src\main\webapp目录下的文件复制到OAuthClientWebapp下WebContent目录中对应的位置

4. 将OAuthClientDesktop中lib文件夹中的所有jar包复制到OAuthClientWebappWebContent\WEB-INF\lib文件夹中,并将其配置进Build Path

5. 修改net.oauth.example.consumer.webapp包中consumer.properties文件下sample.serviceProvider.baseURL所对应的实际URL,如修改为:http://localhost:8080/OAuthServer/

6. 同时启动OAuthServer和OAuthClientWebapp两个工程,并在浏览器中访问http://localhost:8080/OAuthClientWebapp/进行测试

0 0
原创粉丝点击