diff --git a/src/main/java/me/zhyd/oauth/config/AuthDefaultSource.java b/src/main/java/me/zhyd/oauth/config/AuthDefaultSource.java index 1a02e736a3ccc6df8aa016277c21f89fca77ac6e..741a7e5ecabd4b70eb280841a640f4e40e667864 100644 --- a/src/main/java/me/zhyd/oauth/config/AuthDefaultSource.java +++ b/src/main/java/me/zhyd/oauth/config/AuthDefaultSource.java @@ -749,7 +749,7 @@ public enum AuthDefaultSource implements AuthSource { @Override public String accessToken() { - return "https://open-oauth.jd.com/oauth2/access_token"; + return "https://open-oauth.jd.com/oauth2/access_token"; } @Override @@ -761,5 +761,31 @@ public enum AuthDefaultSource implements AuthSource { public String refresh() { return "https://open-oauth.jd.com/oauth2/refresh_token"; } + }, + + /** + * 阿里云 + */ + ALIYUN { + @Override + public String authorize() { + return "https://signin.aliyun.com/oauth2/v1/auth"; + } + + @Override + public String accessToken() { + return "https://oauth.aliyun.com/v1/token"; + } + + @Override + public String userInfo() { + return "https://oauth.aliyun.com/v1/userinfo"; + } + + @Override + public String refresh() { + return "https://oauth.aliyun.com/v1/token"; + } } + } diff --git a/src/main/java/me/zhyd/oauth/model/AuthUser.java b/src/main/java/me/zhyd/oauth/model/AuthUser.java index a05e81e59ea54cfa0487a84ade91b65326d6f2d0..530e73aabcba815038ebb640fc39662f420dbeef 100644 --- a/src/main/java/me/zhyd/oauth/model/AuthUser.java +++ b/src/main/java/me/zhyd/oauth/model/AuthUser.java @@ -1,5 +1,6 @@ package me.zhyd.oauth.model; +import com.alibaba.fastjson.JSONObject; import lombok.*; import me.zhyd.oauth.enums.AuthUserGender; import java.io.Serializable; @@ -17,7 +18,7 @@ import java.io.Serializable; @AllArgsConstructor public class AuthUser implements Serializable { /** - * 用户第三方系统的唯一id。在调用方集成改组件时,可以用uuid + source唯一确定一个用户 + * 用户第三方系统的唯一id。在调用方集成该组件时,可以用uuid + source唯一确定一个用户 * * @since 1.3.3 */ @@ -66,5 +67,9 @@ public class AuthUser implements Serializable { * 用户授权的token信息 */ private AuthToken token; + /** + * 第三方平台返回的原始用户信息 + */ + private JSONObject rawUserInfo; } diff --git a/src/main/java/me/zhyd/oauth/request/AuthAliyunRequest.java b/src/main/java/me/zhyd/oauth/request/AuthAliyunRequest.java new file mode 100644 index 0000000000000000000000000000000000000000..137c237a6b3d2213f05f156809210762d1fe6236 --- /dev/null +++ b/src/main/java/me/zhyd/oauth/request/AuthAliyunRequest.java @@ -0,0 +1,58 @@ +package me.zhyd.oauth.request; + +import com.alibaba.fastjson.JSONObject; +import me.zhyd.oauth.cache.AuthStateCache; +import me.zhyd.oauth.config.AuthConfig; +import me.zhyd.oauth.config.AuthDefaultSource; +import me.zhyd.oauth.model.AuthCallback; +import me.zhyd.oauth.model.AuthToken; +import me.zhyd.oauth.model.AuthUser; + +/** + * 阿里云登录 + * + * @see 阿里云授权(OAuth)文档 + */ +public class AuthAliyunRequest extends AuthDefaultRequest { + + public AuthAliyunRequest(AuthConfig config) { + super(config, AuthDefaultSource.ALIYUN); + } + + public AuthAliyunRequest(AuthConfig config, AuthStateCache authStateCache) { + super(config, AuthDefaultSource.ALIYUN, authStateCache); + } + + @Override + protected AuthToken getAccessToken(AuthCallback authCallback) { + String response = doPostAuthorizationCode(authCallback.getCode()); + JSONObject accessTokenObject = JSONObject.parseObject(response); + return AuthToken.builder() + .accessToken(accessTokenObject.getString("access_token")) + .expireIn(accessTokenObject.getIntValue("expires_in")) + .tokenType(accessTokenObject.getString("token_type")) + .idToken(accessTokenObject.getString("id_token")) + .refreshToken(accessTokenObject.getString("refresh_token")) + .build(); + } + + /* + * 用户信息示例(主账号登录时) + * { + * "sub":"PPPpppP+NRsXg/aaAaAAaA==", + * "uid":"1222222222222222", + * "login_name":"阿里云1234", + * "requestid":"6f6af0f2-0f98-4410-a4b0-83bd5e1c1506", + * "name":"root", + * "bid":"22222", + * "aid":"1222222222222222" + * } + */ + @Override + protected AuthUser getUserInfo(AuthToken authToken) { + String userInfo = doGetUserInfo(authToken); + JSONObject jsonObject = JSONObject.parseObject(userInfo); + return AuthUser.builder().rawUserInfo(jsonObject).build(); + } + +}