1
0
mirror of synced 2026-05-22 21:53:18 +00:00
Files
JustAuth/src/main/java/me/zhyd/oauth/utils/AuthChecker.java
T

83 lines
3.3 KiB
Java
Raw Normal View History

2019-01-31 17:44:42 +08:00
package me.zhyd.oauth.utils;
import me.zhyd.oauth.config.AuthConfig;
import me.zhyd.oauth.config.AuthDefaultSource;
2019-06-20 10:10:18 +08:00
import me.zhyd.oauth.config.AuthSource;
2019-07-30 21:19:55 +08:00
import me.zhyd.oauth.enums.AuthResponseStatus;
import me.zhyd.oauth.exception.AuthException;
2019-08-05 22:05:58 +08:00
import me.zhyd.oauth.model.AuthCallback;
2019-01-31 17:44:42 +08:00
/**
2019-05-23 09:06:13 +08:00
* 授权配置类的校验器
*
2019-01-31 17:44:42 +08:00
* @author yadong.zhang (yadong.zhang0415(a)gmail.com)
2019-07-27 07:55:52 +08:00
* @since 1.6.1-beta
2019-01-31 17:44:42 +08:00
*/
public class AuthChecker {
2019-01-31 17:44:42 +08:00
/**
2019-02-19 14:49:59 +08:00
* 是否支持第三方登录
2019-01-31 17:44:42 +08:00
*
2019-03-29 15:27:27 +08:00
* @param config config
* @param source source
2019-01-31 17:44:42 +08:00
* @return true or false
2019-07-27 07:55:52 +08:00
* @since 1.6.1-beta
2019-01-31 17:44:42 +08:00
*/
public static boolean isSupportedAuth(AuthConfig config, AuthSource source) {
2019-07-30 18:47:14 +08:00
boolean isSupported = StringUtils.isNotEmpty(config.getClientId()) && StringUtils.isNotEmpty(config.getClientSecret()) && StringUtils.isNotEmpty(config.getRedirectUri());
if (isSupported && AuthDefaultSource.ALIPAY == source) {
isSupported = StringUtils.isNotEmpty(config.getAlipayPublicKey());
}
if (isSupported && AuthDefaultSource.STACK_OVERFLOW == source) {
isSupported = StringUtils.isNotEmpty(config.getStackOverflowKey());
}
if (isSupported && AuthDefaultSource.WECHAT_ENTERPRISE == source){
2019-08-06 15:44:02 +08:00
isSupported = StringUtils.isNotEmpty(config.getAgentId());
}
return isSupported;
}
/**
* 检查配置合法性。针对部分平台, 对redirect uri有特定要求。一般来说redirect uri都是http://,而对于facebook平台, redirect uri 必须是https的链接
*
* @param config config
* @param source source
2019-07-27 07:55:52 +08:00
* @since 1.6.1-beta
*/
public static void checkConfig(AuthConfig config, AuthSource source) {
String redirectUri = config.getRedirectUri();
if (!GlobalAuthUtil.isHttpProtocol(redirectUri) && !GlobalAuthUtil.isHttpsProtocol(redirectUri)) {
2019-07-16 17:59:36 +08:00
throw new AuthException(AuthResponseStatus.ILLEGAL_REDIRECT_URI);
}
// facebook的回调地址必须为https的链接
if (AuthDefaultSource.FACEBOOK == source && !GlobalAuthUtil.isHttpsProtocol(redirectUri)) {
2019-07-16 17:59:36 +08:00
throw new AuthException(AuthResponseStatus.ILLEGAL_REDIRECT_URI);
}
// 支付宝在创建回调地址时,不允许使用localhost或者127.0.0.1
if (AuthDefaultSource.ALIPAY == source && GlobalAuthUtil.isLocalHost(redirectUri)) {
2019-07-16 17:59:36 +08:00
throw new AuthException(AuthResponseStatus.ILLEGAL_REDIRECT_URI);
}
2019-01-31 17:44:42 +08:00
}
/**
* 校验回调传回的code
2019-08-05 22:05:58 +08:00
* <p>
2019-08-06 17:46:51 +08:00
* {@code v1.10.0}版本中改为传入{@code source}和{@code callback},对于不同平台使用不同参数接受code的情况统一做处理
*
2019-08-05 22:05:58 +08:00
* @param source 当前授权平台
* @param callback 从第三方授权回调回来时传入的参数集合
2019-07-27 07:55:52 +08:00
* @since 1.8.0
*/
2019-08-05 22:05:58 +08:00
public static void checkCode(AuthSource source, AuthCallback callback) {
String code = callback.getCode();
if (source == AuthDefaultSource.ALIPAY) {
2019-08-05 22:05:58 +08:00
code = callback.getAuth_code();
} else if (source == AuthDefaultSource.HUAWEI) {
2019-08-05 22:05:58 +08:00
code = callback.getAuthorization_code();
}
if (StringUtils.isEmpty(code)) {
2019-07-16 17:59:36 +08:00
throw new AuthException(AuthResponseStatus.ILLEGAL_CODE);
}
}
2019-01-31 17:44:42 +08:00
}