是否已经在远离了开源?

淌过全身的冷水,突然发现,多久没在写过开源的代码了.

那些开源的项目 spring-oauth-server, oauth2-shiro, HeartBeat 等多久没再更新过版本了.

查看着过去的提交记录, 我是否已经在远离了开源,远离了开源精神与 开源代码…

猛然发现,2017快过一半, 我却尚未那怕更新一个小版本, 没有, 都没有.

翻看着过去的日子, 时间都去哪了, 上班,工作,加班,继续不断的上班,工作,….

没有的开源码代码的精神了????

看着大家的捐助, 不断增大的技术交流微信群(OAuth-OIDC),; 我去在干些什么去了;;

 

没有进步, 没有开源的进步, 只在流逝的日子中渐渐远离.远离….

不断更新的技术, 我却在有了些停止不前,不在路上.

曾经把一个简单的事做成开源的小程序(HeartBeat), 是更需要更多的继续….

你现在的生活还有激情吗?你心中的火焰还在燃烧吗?    疑问着自己

 

请将身体更新, 请将代码更新, 请继续开源精神, …

人生最重要的不是索取,人生最重要的是奉献…

my_keyboard

“没有什么能够阻挡, 你对自由的向往,天马行空的生涯, 你的心了无牵挂, ….  也曾感觉彷徨, 当你低头的瞬间, 才发现脚下的路, ….”

—<蓝莲花> 许巍

http://bd.kuwo.cn/yinyue/203139

 

oauth2-shiro 0.2版本发布

oauth2-shiro 0.2版本正式发布, 在7月完成开发工作,但由于当时发布 http://git.oschina.net/mkk/oauth2-shiro-redis 项目竟然给忘记了. 该版本主要更新如下

1.更新首页UI, 参照spring-oauth-server

2.Add client details overview

3.Add client details testing

4.user add/edit, overview

5.添加API使用说明, 举例各个场景

6.发布到测试服务器

7.resources模块更新UI说明

 

从0.2版本开始可在线测试,测试地址分别为:

authz: https://andaily.com/authz/

resources:https://andaily.com/rs/

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

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

grant_type=authorization_code 中 redirect_uri的代码实现参考

OAuth2中grant_type=authorization_code时, 需要填写redirect_uri, 而该uri将如何处理与实现呢, 在此提供具体的讲解与实现参考

redirect_uri在注册ClientDetails时需要提供(当grant_type包含authorization_code时), 且在发起OAUTH2流程时需要在参数中传递redirec_uri, 这两处的值必须一致.

 

在业务中, redirect_uri代码实现主要用于接收返回的code值, 校验state是否合法, 以及通过code换取accessToken操作.

在 spring-oauth-client 项目的 AuthorizationCodeController.java 类中, authorization_code_callback 方法实现了以上的逻辑, 在具体实现是可参考该方法的实现, 代码如下:

@RequestMapping(value = "authorization_code_callback")
public String authorizationCodeCallback(AuthCallbackDto callbackDto, HttpServletRequest request, Model model) throws Exception {

    if (callbackDto.error()) {
        //Server response error
        model.addAttribute("message", callbackDto.getError_description());
        model.addAttribute("error", callbackDto.getError());
        return "redirect:oauth_error";
    } else if (correctState(callbackDto, request)) {
        //Go to retrieve access_token form
        AuthAccessTokenDto accessTokenDto = oauthService.createAuthAccessTokenDto(callbackDto);
        model.addAttribute("accessTokenDto", accessTokenDto);
        model.addAttribute("host", host);
        return "code_access_token";
    } else {
        //illegal state
        model.addAttribute("message", "Illegal \"state\": " + callbackDto.getState());
        model.addAttribute("error", "Invalid state");
        return "redirect:oauth_error";
    }

}

 

这里实现首先检查服务端是否返回error信息,

然后判断state是否正确, 若正确则显示一个页面, 并在code_access_token方法中(同一个类中)使用 httpclient 发起请求(grant_type=authorization_code)通过 code换取access_token.

其它情况则显示error信息.

 

http://git.oschina.net/mkk/spring-oauth-client

传递access_token参数的正确方式

在OAuth中, access_token参数的传递如何才能更安全呢? 不知你有没有具体去研究过, 在此总结传递access_token的正确方式,

(所谓正确方式是指传递方式更安全, 更隐匿, 更不容易被网络拦截,网络攻击的方式)

 

在 spring-oauth-server 与 oauth2-shiro 中均支持以下提到的传递access_token的方式.

 

1. 通过Header传递 access_token; [推荐]

在请求URL的Header中, 添加header -> Authorization: bearer access_token,  示例代码(Java):

postHandler.addHeader("Authorization", "bearer 0fe12a74-e613-4d1b-9785-f96847bad346");

一般在代码中使用httpclient或URLConnection来实现,如Android, IOS客户端, 不适用于浏览器传递access_token

2.若请求URL使用POST方式提交, 将access_token放在请求body中而不是拼接在URL上, 示例代码(HTML):

<form action="db_table_description" method="post">
    <input type="hidden" name="access_token" value="0fe12a74-e613-4d1b-9785-f96847bad346"/>
    <input type="text" name="username"/>
    <button type="submit">Submit</button>
</form>

3.最后的选择, 通过URL拼接参数access_token, 示例代码:

http://monkeyk.com/oauth_test?access_token=0fe12a74-e613-4d1b-9785-f96847bad346

一般使用在GET请求, POST等其他请求方式也支持

以上三种方式, 优先选择第一,第二种, 少用第三种方式.这些方式都是基于HTTP请求下所采用的.
更安全的传递access_token的方式是启用HTTPS连接,保证网络传输安全.

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

 

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