应用中心
This commit is contained in:
parent
57af6b5757
commit
6c1bc61ece
65
src/main/java/com/lktx/center/config/SsoAuthRequest.java
Normal file
65
src/main/java/com/lktx/center/config/SsoAuthRequest.java
Normal file
@ -0,0 +1,65 @@
|
||||
package com.lktx.center.config;
|
||||
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import me.zhyd.oauth.cache.AuthStateCache;
|
||||
import me.zhyd.oauth.config.AuthConfig;
|
||||
import me.zhyd.oauth.enums.AuthResponseStatus;
|
||||
import me.zhyd.oauth.enums.AuthUserGender;
|
||||
import me.zhyd.oauth.exception.AuthException;
|
||||
import me.zhyd.oauth.model.AuthCallback;
|
||||
import me.zhyd.oauth.model.AuthResponse;
|
||||
import me.zhyd.oauth.model.AuthToken;
|
||||
import me.zhyd.oauth.model.AuthUser;
|
||||
import me.zhyd.oauth.request.AuthDefaultRequest;
|
||||
import me.zhyd.oauth.utils.*;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
public class SsoAuthRequest extends AuthDefaultRequest {
|
||||
|
||||
public SsoAuthRequest(AuthConfig config) {
|
||||
super(config, SsoSource.SSO_SOURCE);
|
||||
}
|
||||
|
||||
public SsoAuthRequest(AuthConfig config, AuthStateCache authStateCache) {
|
||||
super(config,SsoSource.SSO_SOURCE, authStateCache);
|
||||
}
|
||||
|
||||
public AuthToken getAccessToken(AuthCallback authCallback) {
|
||||
return AuthToken.builder().accessCode(authCallback.getCode()).build();
|
||||
}
|
||||
|
||||
private AuthToken getAuthToken(JSONObject object) {
|
||||
this.checkResponse(object);
|
||||
return AuthToken.builder().accessToken(object.getString("access_token")).expireIn(object.getIntValue("expires_in")).tokenType(object.getString("token_type")).idToken(object.getString("id_token")).refreshToken(object.getString("refresh_token")).uid(object.getString("userId")).openId(object.getString("userId")).build();
|
||||
}
|
||||
|
||||
private void checkResponse(JSONObject object) {
|
||||
if (object.containsKey("error")) {
|
||||
throw new AuthException(object.getString("error_description"));
|
||||
}
|
||||
}
|
||||
|
||||
public AuthUser getUserInfo(AuthToken authToken) {
|
||||
String response = this.doPostAuthorizationCode(authToken.getAccessCode());
|
||||
JSONObject accessTokenObject = JSONObject.parseObject(response);
|
||||
if (accessTokenObject.containsKey("error")) {
|
||||
throw new AuthException(accessTokenObject.getString("error_description"));
|
||||
} else {
|
||||
authToken = this.getAuthToken(accessTokenObject);
|
||||
String nick = GlobalAuthUtils.urlDecode(accessTokenObject.getString("taobao_user_nick"));
|
||||
return AuthUser.builder().rawUserInfo(accessTokenObject).uuid(StringUtils.isEmpty(authToken.getUid()) ? authToken.getOpenId() : authToken.getUid()).username(nick).nickname(nick).gender(AuthUserGender.UNKNOWN).token(authToken).source(this.source.toString()).build();
|
||||
}
|
||||
}
|
||||
|
||||
public AuthResponse<AuthToken> refresh(AuthToken oldToken) {
|
||||
String tokenUrl = this.refreshTokenUrl(oldToken.getRefreshToken());
|
||||
String response = (new HttpUtils(this.config.getHttpConfig())).post(tokenUrl).getBody();
|
||||
JSONObject accessTokenObject = JSONObject.parseObject(response);
|
||||
return AuthResponse.builder().code(AuthResponseStatus.SUCCESS.getCode()).data(this.getAuthToken(accessTokenObject)).build();
|
||||
}
|
||||
|
||||
public String authorize(String state) {
|
||||
return UrlBuilder.fromBaseUrl(this.source.authorize()).queryParam("response_type", "code").queryParam("client_id", this.config.getClientId()).queryParam("redirect_uri", this.config.getRedirectUri()).queryParam("view", "web").queryParam("state", this.getRealState(state)).build();
|
||||
}
|
||||
}
|
||||
27
src/main/java/com/lktx/center/config/SsoSource.java
Normal file
27
src/main/java/com/lktx/center/config/SsoSource.java
Normal file
@ -0,0 +1,27 @@
|
||||
package com.lktx.center.config;
|
||||
|
||||
import me.zhyd.oauth.config.AuthSource;
|
||||
import me.zhyd.oauth.request.AuthDefaultRequest;
|
||||
|
||||
public enum SsoSource implements AuthSource {
|
||||
SSO_SOURCE {
|
||||
public String authorize() {
|
||||
return "https://github.com/login/oauth/authorize";
|
||||
}
|
||||
|
||||
public String accessToken() {
|
||||
return "https://github.com/login/oauth/access_token";
|
||||
}
|
||||
|
||||
public String userInfo() {
|
||||
return "https://api.github.com/user";
|
||||
}
|
||||
|
||||
@Override
|
||||
public Class<? extends AuthDefaultRequest> getTargetClass() {
|
||||
return SsoAuthRequest.class;
|
||||
}
|
||||
|
||||
},
|
||||
|
||||
}
|
||||
@ -0,0 +1,37 @@
|
||||
package com.lktx.center.controller;
|
||||
|
||||
import cn.hserver.plugin.web.annotation.Controller;
|
||||
import cn.hserver.plugin.web.annotation.RequestMapping;
|
||||
import cn.hserver.plugin.web.interfaces.HttpResponse;
|
||||
import com.lktx.center.config.SsoAuthRequest;
|
||||
import me.zhyd.oauth.config.AuthConfig;
|
||||
import me.zhyd.oauth.model.AuthCallback;
|
||||
import me.zhyd.oauth.request.AuthQqRequest;
|
||||
import me.zhyd.oauth.request.AuthRequest;
|
||||
import me.zhyd.oauth.utils.AuthStateUtils;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
@Controller("/oauth")
|
||||
public class RestAuthController {
|
||||
|
||||
@RequestMapping("/render")
|
||||
public void renderAuth(HttpResponse response) throws IOException {
|
||||
AuthRequest authRequest = getAuthRequest();
|
||||
response.redirect(authRequest.authorize(AuthStateUtils.createState()));
|
||||
}
|
||||
|
||||
@RequestMapping("/callback")
|
||||
public Object login(AuthCallback callback) {
|
||||
AuthRequest authRequest = getAuthRequest();
|
||||
return authRequest.login(callback);
|
||||
}
|
||||
|
||||
private AuthRequest getAuthRequest() {
|
||||
return new SsoAuthRequest(AuthConfig.builder()
|
||||
.clientId("App ID")
|
||||
.clientSecret("App Key")
|
||||
.redirectUri("网站回调域")
|
||||
.build());
|
||||
}
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user