houzhongjian
2024-09-14 818a0170d8f2950d52cc7300a302356bbc523236
提交 | 用户 | 时间
e7c126 1 package com.iailab.module.system.service.oauth2;
H 2
3 import com.iailab.module.system.dal.dataobject.oauth2.OAuth2AccessTokenDO;
4
5 import java.util.List;
6
7 /**
8  * OAuth2 授予 Service 接口
9  *
10  * 从功能上,和 Spring Security OAuth 的 TokenGranter 的功能,提供访问令牌、刷新令牌的操作
11  *
12  * 将自身的 AdminUser 用户,授权给第三方应用,采用 OAuth2.0 的协议。
13  *
14  * 问题:为什么自身也作为一个第三方应用,也走这套流程呢?
15  * 回复:当然可以这么做,采用 password 模式。考虑到大多数开发者使用不到这个特性,OAuth2.0 毕竟有一定学习成本,所以暂时没有采取这种方式。
16  *
17  * @author iailab
18  */
19 public interface OAuth2GrantService {
20
21     /**
22      * 简化模式
23      *
24      * 对应 Spring Security OAuth2 的 ImplicitTokenGranter 功能
25      *
26      * @param userId 用户编号
27      * @param userType 用户类型
28      * @param clientId 客户端编号
29      * @param scopes 授权范围
30      * @return 访问令牌
31      */
32     OAuth2AccessTokenDO grantImplicit(Long userId, Integer userType,
33                                       String clientId, List<String> scopes);
34
35     /**
36      * 授权码模式,第一阶段,获得 code 授权码
37      *
38      * 对应 Spring Security OAuth2 的 AuthorizationEndpoint 的 generateCode 方法
39      *
40      * @param userId 用户编号
41      * @param userType 用户类型
42      * @param clientId 客户端编号
43      * @param scopes 授权范围
44      * @param redirectUri 重定向 URI
45      * @param state 状态
46      * @return 授权码
47      */
48     String grantAuthorizationCodeForCode(Long userId, Integer userType,
49                                          String clientId, List<String> scopes,
50                                          String redirectUri, String state);
51
52     /**
53      * 授权码模式,第二阶段,获得 accessToken 访问令牌
54      *
55      * 对应 Spring Security OAuth2 的 AuthorizationCodeTokenGranter 功能
56      *
57      * @param clientId 客户端编号
58      * @param code 授权码
59      * @param redirectUri 重定向 URI
60      * @param state 状态
61      * @return 访问令牌
62      */
63     OAuth2AccessTokenDO grantAuthorizationCodeForAccessToken(String clientId, String code,
64                                                              String redirectUri, String state);
65
66     /**
67      * 密码模式
68      *
69      * 对应 Spring Security OAuth2 的 ResourceOwnerPasswordTokenGranter 功能
70      *
71      * @param username 账号
72      * @param password 密码
73      * @param clientId 客户端编号
74      * @param scopes 授权范围
75      * @return 访问令牌
76      */
77     OAuth2AccessTokenDO grantPassword(String username, String password,
78                                       String clientId, List<String> scopes);
79
80     /**
81      * 刷新模式
82      *
83      * 对应 Spring Security OAuth2 的 ResourceOwnerPasswordTokenGranter 功能
84      *
85      * @param refreshToken 刷新令牌
86      * @param clientId 客户端编号
87      * @return 访问令牌
88      */
89     OAuth2AccessTokenDO grantRefreshToken(String refreshToken, String clientId);
90
91     /**
92      * 客户端模式
93      *
94      * 对应 Spring Security OAuth2 的 ClientCredentialsTokenGranter 功能
95      *
96      * @param clientId 客户端编号
97      * @param scopes 授权范围
98      * @return 访问令牌
99      */
100     OAuth2AccessTokenDO grantClientCredentials(String clientId, List<String> scopes);
101
102     /**
103      * 移除访问令牌
104      *
105      * 对应 Spring Security OAuth2 的 ConsumerTokenServices 的 revokeToken 方法
106      *
107      * @param accessToken 访问令牌
108      * @param clientId 客户端编号
109      * @return 是否移除到
110      */
111     boolean revokeToken(String clientId, String accessToken);
112
113 }