goupan
2024-04-03 5506e9a45e717ffcb67ec313b5a4e8206d9b3a39
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
/*
 * Copyright [2020-2030] [https://www.stylefeng.cn]
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *
 * Guns采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
 *
 * 1.请不要删除和修改根目录下的LICENSE文件。
 * 2.请不要删除和修改Guns源码头部的版权声明。
 * 3.请保留源码和相关描述文件的项目出处,作者声明等。
 * 4.分发源码时候,请注明软件出处 https://gitee.com/stylefeng/guns
 * 5.在修改包名,模块名称,项目代码等时,请注明软件出处 https://gitee.com/stylefeng/guns
 * 6.若您的项目无法满足以上几点,可申请商业授权
 */
package cn.stylefeng.roses.kernel.auth.api;
 
import cn.stylefeng.roses.kernel.auth.api.exception.AuthException;
import cn.stylefeng.roses.kernel.auth.api.pojo.auth.LoginRequest;
import cn.stylefeng.roses.kernel.auth.api.pojo.auth.LoginResponse;
import cn.stylefeng.roses.kernel.auth.api.pojo.auth.LoginWithTokenRequest;
import cn.stylefeng.roses.kernel.auth.api.pojo.login.LoginUser;
import cn.stylefeng.roses.kernel.jwt.api.pojo.payload.DefaultJwtPayload;
 
/**
 * 认证服务的接口,包括基本的登录退出操作和校验token等操作
 *
 * @author fengshuonan
 * @date 2020/10/26 14:41
 */
public interface AuthServiceApi {
 
    /**
     * 常规登录操作
     *
     * @param loginRequest 登录的请求
     * @return token 一般为jwt token
     * @author fengshuonan
     * @date 2020/10/26 14:41
     */
    LoginResponse login(LoginRequest loginRequest);
 
    /**
     * 登录(直接用账号登录),一般用在第三方登录
     *
     * @param username 账号
     * @author fengshuonan
     * @date 2020/10/26 14:40
     */
    LoginResponse loginWithUserName(String username);
 
    /**
     * 登录(通过账号和sso后的token),一般用在单点登录
     *
     * @param username 账号
     * @param caToken  sso登录成功后的会话
     * @author fengshuonan
     * @date 2021/5/25 22:44
     */
    LoginResponse loginWithUserNameAndCaToken(String username, String caToken);
 
    /**
     * 通过token进行登录,一般用在单点登录服务
     *
     * @param loginWithTokenRequest 请求
     * @author fengshuonan
     * @date 2021/5/25 22:44
     */
    LoginResponse LoginWithToken(LoginWithTokenRequest loginWithTokenRequest);
 
    /**
     * 当前登录人退出登录
     *
     * @author fengshuonan
     * @date 2020/10/19 14:16
     */
    void logout();
 
    /**
     * 移除某个token,也就是退出某个用户
     *
     * @param token 某个用户的登录token
     * @author fengshuonan
     * @date 2020/10/19 14:16
     */
    void logoutWithToken(String token);
 
    /**
     * 校验jwt token的正确性,调用jwt工具类相关方法校验
     * <p>
     * 结果有三种,第一是jwt过期了,第二是用户随便写的错误token,第三种是token正确,token正确不会抛出异常
     *
     * @param token 某个用户的登录token
     * @return token解析出的用户基本信息
     * @throws AuthException 认证异常,如果token错误或过期,会有相关的异常抛出
     * @author fengshuonan
     * @date 2020/10/19 14:16
     */
    DefaultJwtPayload validateToken(String token) throws AuthException;
 
    /**
     * 校验用户是否认证通过,认证是校验token的过程,校验失败会抛出异常
     *
     * @param token      用户登陆的token
     * @param requestUrl 被校验的url
     * @author fengshuonan
     * @date 2020/10/22 16:03
     */
    void checkAuth(String token, String requestUrl);
 
    /**
     * 取消冻结帐号
     *
     * @author xixiaowei
     * @date 2022/1/22 16:37
     */
    void cancelFreeze(LoginRequest loginRequest);
 
    /**
     * 为指定token创建新的登录信息
     *
     * @param token             用户旧的token
     * @param defaultJwtPayload jwt的payload信息
     * @return 新的当前登录用户
     * @author fengshuonan
     * @date 2022/10/17 0:04
     */
    LoginUser createNewLoginInfo(String token, DefaultJwtPayload defaultJwtPayload);
 
}