一、客户端
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
}