(截止 2019-09-19)
在spring-oauth-server的ISSUE #IAI2E 与 #IP5N9中提到的oauth_access_token表会出现多条相同username的数据的异常情况,
解决办法如下:
1.对 oauth_access_token 表的authentication_id 字段增加唯一索引,创建索引SQL如下:
ALTER TABLE oauth_access_token ADD UNIQUE INDEX authentication_id_unique_index(authentication_id);
若是新建数据库,则直接按照 spring-oauth-server开发要求运行SQL文件(initial_db.ddl)即可(创建表的SQL中已经加了唯一索引)
2.推荐使用将access token 数据存入redis来提升性能与解决此问题,详细请访问 http://andaily.com/blog/?p=19776
spring-oauth-server在2019-08-04更新发布了2.0.1版本,
此版本是使用Spring Boot重构实现后的第2个发布版本(2.0.0是第1个),更新内容如下:
2.0.1分支链接:https://gitee.com/shengzhao/spring-oauth-server/tree/2.0.1/
历史更新
在默认的OAuth2场景中,需要发送请求到 /oauth/token 响应AccessToken,这能满足大部分的需求;但在更复杂的场景中,比如在请求时需要传递更多的信息,如deviceId(设备ID),tenantId(租户ID)等,这时默认的实现就不满足要求,需要另写API来实现(同时传递OAuth2需要的参数,如client_id),在后台代码实现中,需要通过代码来生成AccessToken。
在spring-oauth-server的2.0.1版本中,增加了通过代码生成AccessToken的JAVA类,具体如下:
InlineAccessTokenInvoker.java — 生成AccessToken的抽象类,提供许多公共方法实现;
ClientCredentialsInlineAccessTokenInvoker.java — 生成grant_type=client_credentials 时的AccessToken类;
PasswordInlineAccessTokenInvoker.java — 生成grant_type=password 时的AccessToken类;
RefreshTokenInlineAccessTokenInvoker.java — 生成grant_type=refresh_token 时的AccessToken类;
具体的使用示例可查看每个类的单元测试代码。一个示例如下:
调用成功返回 AccessTokenDto 对象,若失败则会抛出OAuth2中的异常对象,如:InvalidGrantException。
相关阅读
处理/oauth/token与/oauth/authorize的Endpoint
为了满足高性能的要求,spring-oauth-server中增加了使用redis存储 AccessToken的功能,以达到更高的性能要求。
以下配置是将AccessToken存入Redis的参考步骤。
前提:使用spring-oauth-server的config分支,并已经安装Redis服务
1.pom.xml中增加spring-boot的redis dependency.
2.application.properties中增加redis的配置属性
3.配置OAuth2中TokenStore的Redis实现:RedisTokenStore
(prefix值 可根据实际需要进行修改;默认的实现使用JdbcTokenStore)
在以上配置完成后,启动redis服务,并将spring-oauth-server重启后,即完成了将AccessToken配置存入Redis的功能,
测试获取AccessToken后,可在redis中查看到对应的数据,如下所示:
spring-oauth-server的redis配置代码分支:https://gitee.com/shengzhao/spring-oauth-server/tree/config-redis/
在升级使用基于 Spring Boot 的 Spring Security OAuth2 后,相比于XML配置,除了所谓的“零配置”区别外,
在OAuth2的使用与流程中有以下几点变化
1. resource-id 只能配置一个(或不要);在XML配置时,可设置多个resource-id(详细请点此);但在Spring Boot中,
一个程序中只能配置唯一的一个resource-id (详细请点此)—— 个人觉得是因为一个微服务就是一资源(resource)吧。
2.ClientDetails中的 client_secret 值加密存储;使用的加密方式与Spring Security的密码加密方式一致;这是安全上
的一大提升,点赞。
https://gitee.com/shengzhao/spring-oauth-server
经过一年多的时间后,我们发布了 spring-oauth-server 2.0.0版本.
使用Spring-Boot 2.0版本重构, 进入模块化,零配置时代. 更符合技术发展与实际需要.
相比之前的版本(1.0及之前版本), 更新如下:
1. 全新的 Spring-Boot风格
2.ClientDetails中的 client_secret 字段加密保存
3.密码加密方式由MD5变成 BCrypt
4.增加CSRF机制支持
5.resourceId变为可选(但建议使用固定的resourceId)
感谢这篇文章, 对于帮助学习与理解 OIDC 协议与使用的 朋友来说, 最全面的一文章.
不多言, 详细请访问
http://www.cnblogs.com/linianhui/p/openid-connect-core.html
拥抱OIDC
好几天时间想起来,我4月没有记录点什么,没发点什么文章,不管是技术的,开源的,还是生活的,所思所想的.
后来我还是决定写点记录点,连标题都不太清晰,名叫4月.
感觉对开源的热情在下降,是计划着继续更新完善OAUTH2相关的知识介绍与内容,还是没有去行动记录于纸上或文章里.
在码不完的代码中,继续着码代码—这类似生活.
我还记得租房一个人时,有了房子也继续是一个人在很多的时间中看着书,继续着前进.
技术,不能停止;脑子,不能静止,感觉于此.
每日来共享单车中徘徊与周旋, 感觉是既锻炼又费力.
感觉脑子进水去拍了CT,等等结果,等待报告出来…
脑子本来就有水,无需进水.
感觉看书中才能有所寄托与进步,就在床头,沙发上,背包中,到处着书的影子. 依旧感觉到上厕所时是最好的看书时光,简单快捷且两不误,只要起身时脚不发麻即可.
以往的总是一本书一本书地看完,而现在是转变为多本书多线程地并行着看.
多年以来,唯有书才感觉是系统学习的来源与未来的可支撑物.
在感觉快有4月18日这个有些特殊的日子来临前写下点思绪有些乱的现状.
等待着又一波的网络营销,电子商务平台的盛宴(感觉会是).
关于编程,更多的是叫编程思想, 思想才是目的,而编程只是过程; 编程是量变,思想是量变的升华,是质变;
在编程中思考,思索,思念,思乡,最后变成思想.
我不用更多的思想,行动才是王道,行动才能解决问题.
请别在思想.
不知啥的,一说到4月,就想到秋生.