示例代码的改进
前面使用spring cloud security和spring cloud oauth2写了一个第三方授权的例子,例子非常的简单,主要目的是用来熟悉OAuth2.0 申请授权的整个流程,这个简单的示例肯定是不能直接用于生产环境的,还有很多需要改进的地方,我们来总结一下:
- 1、只演示了授权码的形式,其它的三种(隐藏式,密码式,客户端凭证)并没有熟悉
- 2、密码和秘钥是未加密的
- 3、oauth的客户端配置,包括id,秘钥等信息是在内存中配置死的,无法动态增加
- 4、token也是放在内存中存储的,无法手动废止
- 5、jwt的生成使用的是简单的秘钥形式,最好使用非对称加密的方式,更加安全可靠
- 6、令牌的申请权限配置不太合理
- 7、资源服务中的jwt和令牌验证配置也不太灵活
- 8、授权流程应该结合eureka开发和使用
- 9、没有验证令牌中继特性,等等等等
从上面列举的问题可以看出,就算示例代码能运行,流程也清楚,但是要学会使用Spring Cloud Security,尤其要在生产环境使用,还需要对每个细节都能掌握和了解才行。
加密配置
首先我们来改进第一个地方,实现加密配置。大家知道用户注册之后,存储用户资料的时候,用户密码在数据库中最好是加密后再保存,同样的道理,oauth的客户端信息最终也是要存储在数据库而不是直接在代码中配置死的,它的secret字段也应该加密后再存储,下面在授权服务中来配置加密,首先修改security配置类,配置加密方式:
然后将登陆用户的密码配置为加密:
然后修改授权配置类,将客户端配置中的secret配置为加密:
这样加密配置就完成了。资源服务不用做任何修改。
测试
配置上面三个加密的地方后,加密就配置好了,下面来测试一下,其实测试流程与前面的一样,客户端感知不到,得到的access_token如下:
最终访问结果如下: