package com.iailab.module.system.service.oauth2;
|
|
import com.iailab.module.system.dal.dataobject.oauth2.OAuth2AccessTokenDO;
|
|
import java.util.List;
|
|
/**
|
* OAuth2 授予 Service 接口
|
*
|
* 从功能上,和 Spring Security OAuth 的 TokenGranter 的功能,提供访问令牌、刷新令牌的操作
|
*
|
* 将自身的 AdminUser 用户,授权给第三方应用,采用 OAuth2.0 的协议。
|
*
|
* 问题:为什么自身也作为一个第三方应用,也走这套流程呢?
|
* 回复:当然可以这么做,采用 password 模式。考虑到大多数开发者使用不到这个特性,OAuth2.0 毕竟有一定学习成本,所以暂时没有采取这种方式。
|
*
|
* @author iailab
|
*/
|
public interface OAuth2GrantService {
|
|
/**
|
* 简化模式
|
*
|
* 对应 Spring Security OAuth2 的 ImplicitTokenGranter 功能
|
*
|
* @param userId 用户编号
|
* @param userType 用户类型
|
* @param clientId 客户端编号
|
* @param scopes 授权范围
|
* @return 访问令牌
|
*/
|
OAuth2AccessTokenDO grantImplicit(Long userId, Integer userType,
|
String clientId, List<String> scopes);
|
|
/**
|
* 授权码模式,第一阶段,获得 code 授权码
|
*
|
* 对应 Spring Security OAuth2 的 AuthorizationEndpoint 的 generateCode 方法
|
*
|
* @param userId 用户编号
|
* @param userType 用户类型
|
* @param clientId 客户端编号
|
* @param scopes 授权范围
|
* @param redirectUri 重定向 URI
|
* @param state 状态
|
* @return 授权码
|
*/
|
String grantAuthorizationCodeForCode(Long userId, Integer userType,
|
String clientId, List<String> scopes,
|
String redirectUri, String state);
|
|
/**
|
* 授权码模式,第二阶段,获得 accessToken 访问令牌
|
*
|
* 对应 Spring Security OAuth2 的 AuthorizationCodeTokenGranter 功能
|
*
|
* @param clientId 客户端编号
|
* @param code 授权码
|
* @param redirectUri 重定向 URI
|
* @param state 状态
|
* @return 访问令牌
|
*/
|
OAuth2AccessTokenDO grantAuthorizationCodeForAccessToken(String clientId, String code,
|
String redirectUri, String state);
|
|
/**
|
* 密码模式
|
*
|
* 对应 Spring Security OAuth2 的 ResourceOwnerPasswordTokenGranter 功能
|
*
|
* @param username 账号
|
* @param password 密码
|
* @param clientId 客户端编号
|
* @param scopes 授权范围
|
* @return 访问令牌
|
*/
|
OAuth2AccessTokenDO grantPassword(String username, String password,
|
String clientId, List<String> scopes);
|
|
/**
|
* 刷新模式
|
*
|
* 对应 Spring Security OAuth2 的 ResourceOwnerPasswordTokenGranter 功能
|
*
|
* @param refreshToken 刷新令牌
|
* @param clientId 客户端编号
|
* @return 访问令牌
|
*/
|
OAuth2AccessTokenDO grantRefreshToken(String refreshToken, String clientId);
|
|
/**
|
* 客户端模式
|
*
|
* 对应 Spring Security OAuth2 的 ClientCredentialsTokenGranter 功能
|
*
|
* @param clientId 客户端编号
|
* @param scopes 授权范围
|
* @return 访问令牌
|
*/
|
OAuth2AccessTokenDO grantClientCredentials(String clientId, List<String> scopes);
|
|
/**
|
* 移除访问令牌
|
*
|
* 对应 Spring Security OAuth2 的 ConsumerTokenServices 的 revokeToken 方法
|
*
|
* @param accessToken 访问令牌
|
* @param clientId 客户端编号
|
* @return 是否移除到
|
*/
|
boolean revokeToken(String clientId, String accessToken);
|
|
}
|