主题:Spring auth2.0用户认证服务可否支持多库

duliming 2018年11月12日 83

项目采用spring cloud 微服务架构,各个微服务都有各自的用户表(目前没有统一为用户中心,暂时没办法解决)。

采用spring-boot-security来实现autho2.0用户认证授权。

我参照网上的教程,认证服务器在获取token信息的时候都是查询单一的数据库用户表来获取用户信息的,而我现在多个不同类型的微服务请求认证服务的时候要分别查询各自库中的用户表,我不知道怎么区分这些请求,然后根据这些不同的请求得到不同的clientID,然后再查询不同的库获得用户信息。

我想表达的是:

1.一个spring auth2.0的用户认证服务,可以支持多个库的不同用户表?

2.如果支持,该怎么做?

duliming 2018年11月14日

想出了两种办法,但是尝试都没成功。

1.认证服务器认证的时候自定义userDetailService,然后再loadByUsername方法中调用SpringContextHolder.getContext().getAuthentication()方法获取Authentication对象,如果这个对象是OAuth2Authentication类型的话,可以获取到clientID。可惜不是,而是UsernamePasswordAuthenticationToken,无法获取clientID。


2.基于1,获取了UsernamePasswordAuthenticationToken,

(1)那么否通通过getDetail来获取clientId呢,但是detail里只有IP地址信息。

(2)可否通过获取Principal信息来获取clientID,是否可以通过自定义Principal来实现呢?正在尝试中。。。