Spring与Oauth2的整合示例
项目用Maven管理
使用的技术与版本号
Spring(3.1.1.RELEASE)
SpringSecurity(3.1.0.RELEASE)
MyBatis(3.2.1)
spring-security-oauth2(1.0.5.RELEASE)
客户端demo项目请访问spring-oauth-client
如何使用?
项目是Maven管理的,需要本地安装maven(开发用的maven版本号为3.1.0),还有MySql(开发用的mysql版本号为5.5)
下载(或clone)项目到本地
创建MySQL数据库(如数据库名oauth2),并运行相应的SQL脚本(脚本文件位于others/database目录), 运行脚本的顺序:initial_db.ddl->oauth.ddl->initial_data.ddl
修改spring-oauth-server.properties(位于src/resources目录)中的数据库连接信息(包括username,password等)
将本地项目导入到IDE(如IntellijIDEA)中,配置Tomcat(或类似的servelt运行服务器),并启动Tomcat(默认端口为8080) 另:也可通过mavenpackage命令将项目编译为war文件(spring-oauth-server.war), 将war放在Tomcat中并启动(注意:这种方式需要将spring-oauth-server.properties加入到classpath中并正确配置数据库连接信息).
参考oauth_test.txt(位于others目录)的内容并测试之(也可在浏览器中访问相应的地址,如:https://localhost:8080/spring-oauth-server).
帮助与改进
与该项目相关的博客请访问https://blog.csdn.net/monkeyking1987/article/details/16828059
如果在使用过程中遇到特殊的问题(如:如何将oauth_code存入数据库),请访问项目的Wiki与附件.我会把大家反馈的问题解决办法添加在这里.若在这两个地方没有找到解决办法的,欢迎发邮件到shengzhao@shengzhaoli.com一起讨论.
如果在使用项目的过程中发现任何的BUG或者更好的提议,建议将其提交到项目的Issues中,我会一直关注并不断改进项目.
功能扩展
oauth_code存入数据库的配置, 请下载文件oauth_code存入数据库的配置.jpg
改变token过期的时间的配置,请下载文件改变token过期的时间的配置.jpg
自定义grant_type,默认情况支持的grant_type包括[password,authorization_code,refresh_token,implicit],若不需要其中的某些grant_type, 则可以修改oauth_client_details表中的authorized_grant_types字段的值; 若想把整个Oauth服务修改来只支持某些grant_type,请修改security.xml文件中的 oauth2:authorization-server中的内容,将对应的grant_type注释或删掉即可
如何刷新access_token(refresh_token),在通过客户端(如移动设备)登录成功后返回的数据如下
{"access_token":"3420d0e0-ed77-45e1-8370-2b55af0a62e8","token_type":"bearer","refresh_token":"b36f4978-a172-4aa8-af89-60f58abe3ba1","expires_in":43199,"scope":"read write"}若需要刷新获取新的token(一般在expires_in有效期时间快到时),请求的URL类似如下
https://localhost:8080/oauth/token?client_id=mobile-client&client_secret=mobile&grant_type=refresh_token&refresh_token=b36f4978-a172-4aa8-af89-60f58abe3ba1注意:refresh_token参数值必须与登录成功后获取的refresh_token一致,且grant_type=refresh_token 另:刷新token需要ClientDetails支持refresh_token类型的grant_type(默认是支持的)
更多资源
以下是在学习工作中收集的更多关于Oauth的资源,对深入理解与运用Oauth有帮助
OAUTH2核心参数说明,重点介绍了grant_type与response_type以及示例
OAuth2flows,详细介绍Oauth2的流程,各类错误发生时的响应
OAuth2开发人员指南(Springsecurityoauth2),翻译OAuth2DevelopersGuide(springsecurityoauth2)
评论