ruoyi-admin/src/main/resources/application-dev.yml
@@ -184,6 +184,12 @@ enabled: true address: http://localhost:80 type: maxkey: # maxkey æå¡å¨å°å server-url: http://localhost:8080 client-id: 10**********6 client-secret: 1f7d08**********5b7**********29e redirect-uri: ${justauth.address}/social-callback?source=maxkey qq: client-id: 10**********6 client-secret: 1f7d08**********5b7**********29e ruoyi-admin/src/main/resources/application-prod.yml
@@ -186,6 +186,12 @@ enabled: true address: http://localhost:80 type: maxkey: # maxkey æå¡å¨å°å server-url: http://localhost:8080 client-id: 10**********6 client-secret: 1f7d08**********5b7**********29e redirect-uri: ${justauth.address}/social-callback?source=maxkey qq: client-id: 10**********6 client-secret: 1f7d08**********5b7**********29e ruoyi-common/ruoyi-common-social/pom.xml
@@ -23,6 +23,11 @@ <dependency> <groupId>org.dromara</groupId> <artifactId>ruoyi-common-json</artifactId> </dependency> <dependency> <groupId>org.dromara</groupId> <artifactId>ruoyi-common-redis</artifactId> </dependency> </dependencies> ruoyi-common/ruoyi-common-social/src/main/java/org/dromara/common/social/config/properties/SocialLoginConfigProperties.java
@@ -60,4 +60,9 @@ */ private String clientOsType; /** * maxkey æå¡å¨å°å */ private String serverUrl; } ruoyi-common/ruoyi-common-social/src/main/java/org/dromara/common/social/maxkey/AuthMaxKeyRequest.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,80 @@ package org.dromara.common.social.maxkey; import cn.hutool.core.lang.Dict; import me.zhyd.oauth.cache.AuthStateCache; import me.zhyd.oauth.config.AuthConfig; import me.zhyd.oauth.exception.AuthException; import me.zhyd.oauth.model.AuthCallback; import me.zhyd.oauth.model.AuthToken; import me.zhyd.oauth.model.AuthUser; import me.zhyd.oauth.request.AuthDefaultRequest; import org.dromara.common.core.utils.SpringUtils; import org.dromara.common.json.utils.JsonUtils; /** * @author é¿æ¥åå¥ 2023å¹´03æ26æ¥ */ public class AuthMaxKeyRequest extends AuthDefaultRequest { public static final String SERVER_URL = SpringUtils.getProperty("justauth.type.maxkey.server-url"); /** * 设å®å½å±å */ public AuthMaxKeyRequest(AuthConfig config) { super(config, AuthMaxKeySource.MAXKEY); } public AuthMaxKeyRequest(AuthConfig config, AuthStateCache authStateCache) { super(config, AuthMaxKeySource.MAXKEY, authStateCache); } @Override protected AuthToken getAccessToken(AuthCallback authCallback) { String body = doPostAuthorizationCode(authCallback.getCode()); Dict object = JsonUtils.parseMap(body); // oauth/token éªè¯å¼å¸¸ if (object.containsKey("error")) { throw new AuthException(object.getStr("error_description")); } // user éªè¯å¼å¸¸ if (object.containsKey("message")) { throw new AuthException(object.getStr("message")); } return AuthToken.builder() .accessToken(object.getStr("access_token")) .refreshToken(object.getStr("refresh_token")) .idToken(object.getStr("id_token")) .tokenType(object.getStr("token_type")) .scope(object.getStr("scope")) .build(); } @Override protected AuthUser getUserInfo(AuthToken authToken) { String body = doGetUserInfo(authToken); Dict object = JsonUtils.parseMap(body); // oauth/token éªè¯å¼å¸¸ if (object.containsKey("error")) { throw new AuthException(object.getStr("error_description")); } // user éªè¯å¼å¸¸ if (object.containsKey("message")) { throw new AuthException(object.getStr("message")); } return AuthUser.builder() .uuid(object.getStr("id")) .username(object.getStr("username")) .nickname(object.getStr("name")) .avatar(object.getStr("avatar_url")) .blog(object.getStr("web_url")) .company(object.getStr("organization")) .location(object.getStr("location")) .email(object.getStr("email")) .remark(object.getStr("bio")) .token(authToken) .source(source.toString()) .build(); } } ruoyi-common/ruoyi-common-social/src/main/java/org/dromara/common/social/maxkey/AuthMaxKeySource.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,52 @@ package org.dromara.common.social.maxkey; import me.zhyd.oauth.config.AuthSource; import me.zhyd.oauth.request.AuthDefaultRequest; /** * Oauth2 é»è®¤æ¥å£è¯´æ * * @author é¿æ¥åå¥ 2023å¹´03æ26æ¥ * */ public enum AuthMaxKeySource implements AuthSource { /** * èªå·±æå»ºç maxkey ç§æ */ MAXKEY { /** * ææçapi */ @Override public String authorize() { return AuthMaxKeyRequest.SERVER_URL + "/sign/authz/oauth/v20/authorize"; } /** * è·åaccessTokençapi */ @Override public String accessToken() { return AuthMaxKeyRequest.SERVER_URL + "/sign/authz/oauth/v20/token"; } /** * è·åç¨æ·ä¿¡æ¯çapi */ @Override public String userInfo() { return AuthMaxKeyRequest.SERVER_URL + "/sign/api/oauth/v20/me"; } /** * å¹³å°å¯¹åºç AuthRequest å®ç°ç±»ï¼å¿ 须继æ¿èª {@link AuthDefaultRequest} */ @Override public Class<? extends AuthDefaultRequest> getTargetClass() { return AuthMaxKeyRequest.class; } } } ruoyi-common/ruoyi-common-social/src/main/java/org/dromara/common/social/utils/SocialUtils.java
@@ -11,6 +11,7 @@ import org.dromara.common.core.utils.SpringUtils; import org.dromara.common.social.config.properties.SocialLoginConfigProperties; import org.dromara.common.social.config.properties.SocialProperties; import org.dromara.common.social.maxkey.AuthMaxKeyRequest; /** * è®¤è¯ææå·¥å ·ç±» @@ -61,6 +62,7 @@ case "gitlab" -> new AuthGitlabRequest(AuthConfig.builder().clientId(clientId).clientSecret(clientSecret).redirectUri(redirectUri).build(), STATE_CACHE); case "wechat_mp" -> new AuthWeChatMpRequest(AuthConfig.builder().clientId(clientId).clientSecret(clientSecret).redirectUri(redirectUri).build(), STATE_CACHE); case "aliyun" -> new AuthAliyunRequest(AuthConfig.builder().clientId(clientId).clientSecret(clientSecret).redirectUri(redirectUri).build(), STATE_CACHE); case "maxkey" -> new AuthMaxKeyRequest(AuthConfig.builder().clientId(clientId).clientSecret(clientSecret).redirectUri(redirectUri).build(), STATE_CACHE); default -> throw new AuthException("æªè·åå°ææçAuthé ç½®"); }; }