oauth2-shiro中将authz与resources模块合并到一个项目中如何配置

oauth2-shiro的设计是分模块, 将authz与resources分成不同的子项目来实现. 但现实中有时需要将其合成一个项目, 对于此类场景中,该如何配置security, 具体如下:

1. 在security配置中使用OAuth2CredentialsMatcher类替换authz模块中的HashedCredentialsMatcher与resources模块中的SimpleCredentialsMatcher配置; 具体的配置可参考OAuth2CredentialsMatcher.java类的中注释.

2.在配置ShiroFilterFactoryBean中的filterChainDefinitions的value中添加

/oauth/** = anon

(另外注意合并时的url pattern不要有重复)

配置示例图
OAuth2CredentialsMatcher

注意截图中的OAuth2JdbcRealm只用于resources模块, 在合并后不能使用, 使用其父类MkkJdbcRealm.
http://git.oschina.net/mkk/oauth2-shiro

oauth2-shiro 0.1-rc 发布

经过国庆期间的假期, oauth2-shiro的0.1-rc版本发布了, 相比0.1-beta版本, 更新内容如下:

1. 重构项目结构,实现模块化. 将OAUTH中的auth(authz模块)与resource(resources模块)分开成不同的子模块(或子项目). authz实现使用各类grant_type去获取token; resources实现资源管理, 通过token去访问, 另添加core模块, 将公共部分提取到该模块中,如定义ClientDetails, AccessToken

2. 提供两种方式来整合OLTU与SHIRO,

方式1:  给SHIRO添加Filter来扩展实现整合,并可使用Shiro的注解(如@RequiresRoles)来控制权限  –深度整合,耦合性高;

方式2: 扩展OLTU的OAuthFilter功能,新加ResourceOAuthFilter类来实现整合  –浅度整合, 使用更灵便;

3. 解决CORS(跨域调用)的问题, 如AJAX调用oauth接口

4. 更多的使用测试以及细节修改,如异常响应内容

 

oauth2-shiro  0.1-rc版本访问地址:  http://git.oschina.net/mkk/oauth2-shiro/tree/0.1-rc/

oauth2-shiro 整合OLTU与SHIRO, 提供一个轻量的OAUTH2应用框架.

oauth2-shiro 0.1-beta 发布

经过不断地试错与研究, 整合oauth2与shiro的 oauth2-shiro项目 0.1-beta 发布.

oauth2-shiro

整合Apache OltuShiro. 提供一个轻量的OAUTH2应用框架.

并根据不同的应用场景提供不同的实现(如web场景,移动设备).

该项目与spring-oauth-server实现相同的需求与场合. 只是在实现上使用的技术不同(spring-oauth-server使用Spring Security + spring-security-oauth2实现; oauth2-oltu实现); 相比spring-oauth-server, oauth2-oltu具有如下特点:

  • 更加透明 — 每一步实现都有可以查看的, 更容易理解的代码, 一目也然
  • 更多的可自定义与可扩展 — 不管是ERROR返回信息的内容或格式, 都可根据需要自定义, 对请求参数,处理细节等可添加更多的具体实现
  • 可读性更强 — 由于Shiro, Oltu 没有Spring Security,spring-security-oauth2 的门槛高, 所有代码都是常用的Controller或Java Bean实现各项业务, 更可读,更易于理解
  • 模块化 — 得益于Oltu的模块化设计, 将authzserver, resourceserver分开成不同的模块, 使用时可根据实际需要将二者合并在一个项目中可拆分为不同的模块

 

主要技术及版本

Spring — 3.2.2.RELEASE
oltu — 1.0.0
shiro — 1.2.3
MySQL — 5.6

 

支持的 grant_type
说明 oauth2-shiro 项目支持的grant_type(授权方式)与功能

  1. authorization_code — 授权码模式(即先登录获取code,再获取token)
  2. password — 密码模式(将用户名,密码传过去,直接获取token)
  3. refresh_token — 刷新access_token
  4. implicit(token) — 简化模式(在redirect_uri 的Hash传递token; Auth客户端运行在浏览器中,如JS,Flash)
  5. client_credentials — 客户端模式(无用户,用户向客户端注册,然后客户端以自己的名义向’服务端’获取资源)

 

http://git.oschina.net/mkk/oauth2-shiro

 

apache-shiro-logo oltu_head

oauth2-shiro项目开发状态(8月)

在8月,由于工作繁忙,没有进行开发.

由于有的朋友提出需要看该项目的源代码,并由其去完成修改与开发,现在已将oauth2-shiro项目开源,

访问地址:

http://git.oschina.net/mkk/oauth2-shiro

但请注意: 该项目代码并未完整开发完成; 若需要完整的实现请访问 http://git.oschina.net/shengzhao/spring-oauth-server

 

项目更新动态文章: http://andaily.com/blog/?p=312

 

我将不断开发完善该项目.也希望您的参与.

oauth2-shiro项目开发状态(7月)

oauth2-shiro项目至7月已经完成的功能有:

1.项目框架的搭建,使用的版本oltu(1.0.0), shiro(1.2.3);

2. grant_type=’authorization_code’的实现;

3. grant_type=’password’的实现;

4. grant_type=’implicit’的实现;

5. grant_type=’client_credentials’的实现;

6. grant_type=’refresh_token’的实现;

 

目前正在开发 对资源访问的控制.

 

但还有以下工作要做:

1. 重构项目,分模块,分为authz-server,resource-server,client  三个模块, 这样更符合实际项目的需要;

2.对token, refresh_token值进行加密(不能直接将其值存入数据库中,但这是可选的);

3.对client_secret添加validator, 用于满足如果client_secret进入加密的情况;

4.添加 UserApprovalHandler,扩展用户自定义approval行为;

5.重构代码, 将tokenService,codeService从oauthService抽出来,而不是合在一起.

 

继续进行中,最终项目访问地址: http://git.oschina.net/mkk/oauth2-shiro (目前访问为404).

 

oltu_headapache-shiro-logo

oauth2-shiro项目介绍

在使用spring-oauth-server项目时,是否感觉到了一丝丝的复杂呢?是否对里面的许多源代码都不知然然呢?你有,我也有.就算我写了,实现了,看了不少.还是会有– 但大部分的程序员是没有如此多的时间来研究的.

是时候给你们另一个项目了: oauth2-shiro, 你肯定值拥有.

oauth2-shiro是整合Apache OltuShiro.的项目. 使用Spring MVC,Spring JDBC等来实现.

所有的与oauth流程操作的代码都在controller里实现. 所有代码可见,可扩展性强.

加以对各种oauth授权验证的流程的熟悉, 将帮助你真正理解与使用OAUTH2.

 

该项目正在开发中,等开发完毕,通过spring-oauth-client测试后,将会开源,供大家学习,使用,交流….

我将在博客中不断发布项目的更新信息.

apache-shiro-logo &oltu_head