Spring Security Oauth2核心组件之ClientDetailsService

一、客户端

public interface ClientDetails extends Serializable {
          
   

	String getClientId();//客户端id
	
	Set<String> getResourceIds();//此客户端可以访问的资源。如果为空,则调用者可以忽略
	
	boolean isSecretRequired();//验证此客户端是否需要secret
	
	String getClientSecret();//获取客户端的secret
	
	boolean isScoped();//此客户端是否仅限于特定范围
	
	Set<String> getScope();//此客户端的范围。如果客户端未确定作用域,则为空
	
	Set<String> getAuthorizedGrantTypes();//此客户端被授权的授权类型
	
	Set<String> getRegisteredRedirectUri();//此客户端的预定义重定向redirect_url
	
	Collection<GrantedAuthority> getAuthorities();//权限集合
	
	Integer getAccessTokenValiditySeconds();//访问令牌有效期
	
	Integer getRefreshTokenValiditySeconds();//刷新令牌有效期
	
	boolean isAutoApprove(String scope);//测试客户端是否需要特定范围的用户批准
	
	Map<String, Object> getAdditionalInformation();//额外的信息

}
他只有一个子类BaseClientDetails

二、操作客户端

public interface ClientDetailsService {
          
   

  //通过clientId获取客户端详情信息
  ClientDetails loadClientByClientId(String clientId) throws ClientRegistrationException;

}
与 UserDetailsService 的注册方式类似, 需要在 AuthorizationServerConfigurationAdapter#configure(ClientDetailsServiceConfigurer clients) 中指定自定义的 ClientDetailsService:
@Override
public void configure(ClientDetailsServiceConfigurer clients) throws Exception {
          
   
    // @formatter:off
    clients.withClientDetails(clientDetailsService);
    // @formatter:on
}
经验分享 程序员 微信小程序 职场和发展