认证开启关闭
[一]背景
认证管理,是微服务系统的核心内容。通常通过前端提供的管理界面进行管理和配置即可,大多数场景仅提供必要的管理功能。而且认证管理功能,通常由专门的认证服务(例如:UAA) 提供支持,其它 OAuth2 的资源服务器是无法对认证进行管理的。但是对于某些场景,比如:物联网客户端的接入,一方面需要实现动态的接入与授权;另一方面需要可以实现认证的动态开启和关闭管理。
Dante Cloud 核心认证管理使用的是 Spring Authorization Server
组件。该组件并未提供动态开启或关闭某个客户端认证功能的支持。
为了解决这个问题,自 3.3.5.0 版本起,Dante Cloud 新增的远程的(非UAA服务)认证开启和关闭支持。不仅支持动态开启和管理某个客户端的认证,还支持在 UAA 服务以外远程调用。
[二]使用
[1]开启支持
要启用动态认证开启和关闭,需要手动在您需要启用动态认证开启和关闭的资源服中开启。
开启方式,在当前服务中的 Application
类中,添加注解 @EnableAuthorizationEnhance
即可。
注意
动态认证开启和关闭功能,并没有像其它功能一样,默认注入到系统中,而是需要手动开启。主要原因是认证是系统核心功能,随意操作可能会导致不可预知的问题,而且会涉及的动态认证功能的业务需求并不会太多,所以目前设计为手动开启方式。
[2]引用操作Bean
需要在你的代码中,注入 AuthenticationManager
Bean,然后通过调用其中相应的方法就可以进行认证动态开启和关闭操作。
例如,新建一个 MyAuthenticationService
,在这个 Service 代码中注入AuthenticationManager
Bean,如下例所示:
@Service
public class MyAuthenticationService {
private final AuthenticationManager authenticationManager;
public MyFileService(AuthenticationManager authenticationManager) {
this.authenticationManager = authenticationManager;
}
}
AuthenticationManager
支持的操作如下所示:
public interface AuthenticationManager {
/**
* 关闭认证
*
* @param id oauth2_registered_client 表中的ID
*/
void disable(String id);
/**
* 开启认证
*
* @param authentication 手动创建 oauth2_registered_client 数据的必要信息 {@link Authentication}
*/
void enable(Authentication authentication);
}