云计算百科
云计算领域专业知识百科平台

Oauth2Request单点登录获取accesstoken和userinfo

Oauth2Request

Oauth2Request

//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by FernFlower decompiler)
//

package me.zhyd.oauth.request;

import me.zhyd.oauth.enums.AuthResponseStatus;
import me.zhyd.oauth.exception.AuthException;
import me.zhyd.oauth.model.AuthCallback;
import me.zhyd.oauth.model.AuthResponse;
import me.zhyd.oauth.model.AuthToken;

public interface AuthRequest {


/** @deprecated */
@Deprecated
default String authorize() {


throw new AuthException(AuthResponseStatus.NOT_IMPLEMENTED);
}

default String authorize(String state) {


throw new AuthException(AuthResponseStatus.NOT_IMPLEMENTED);
}

default AuthResponse login(AuthCallback authCallback) {


throw new AuthException(AuthResponseStatus.NOT_IMPLEMENTED);
}

default AuthResponse revoke(AuthToken authToken) {


throw new AuthException(AuthResponseStatus.NOT_IMPLEMENTED);
}

default AuthResponse refresh(AuthToken authToken) {


throw new AuthException(AuthResponseStatus.NOT_IMPLEMENTED);
}
}

/loginByCode

@ResponseBody
@RequestMapping(value = \”/loginByCode\”, method = RequestMethod.POST)
public Result<JSONObject> loginByCode(@RequestBody AuthCallback callback){


Result<JSONObject> result = new Result<>();
String code = callback.getCode();
if(code==null){


result.error500(\”校验码无效\”);
return result;
}
AuthRequest authRequest = factory.get(\”SINOSOFT\”);
AuthResponse<?> response = authRequest.login(callback);
if(response.getCode() == AuthResponseStatus.SUCCESS.getCode()) {


JSONObject data = JSONObject.parseObject(JSONObject.toJSONString(response.getData()));
JSONObject token = data.getJSONObject(\”token\”);
SysUser sysUser = data.getObject(\”rawUserInfo\”, SysUser.class);
//sysUserService.checkUserIsEffective(sysUser);
String accessToken = token.getString(\”accessToken\”);
redisUtil.set(PREFIX_USER_TOKEN_MH+sysUser.getUsername(),accessToken);
sysUser.setPassword(callback.getCode());
//用户登录信息
userInfo(sysUser, result);
LoginUser loginUser = new LoginUser();
BeanUtils.copyProperties(sysUser, loginUser);
baseCommonService.addLog(\”用户名: \” + sysUser.getUsername() + \”,登录成功!\”, CommonConstant.LOG_TYPE_1, null,loginUser);
return result;
}else{


return result.error500(\”授权码错误,登录失败\”);
}
}

AuthRequest authRequest = factory.get(\”SINOSOFT\”);
AuthResponse<?> response = authRequest.login(callback);

//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by FernFlower decompiler)
//

package me.zhyd.oauth.config;

import me.zhyd.oauth.enums.AuthResponseStatus;
import me.zhyd.oauth.exception.AuthException;

public interface AuthSource {


String authorize();

String accessToken();

String userInfo();

default String revoke() {


throw new AuthException(AuthResponseStatus.UNSUPPORTED);
}

default String refresh() {


throw new AuthException(AuthResponseStatus.UNSUPPORTED);
}

default String getName() {


return this instanceof Enum ? String.valueOf(this) : this.getClass().getSimpleName();
}
}

package org.jeecg.config.oauth2;

import me.zhyd.oauth.config.AuthSource;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

/**
* <p>
* 扩展的自定义 source
* </p>
*
* @author yangkai.shen
* @date Created in 2019/10/9 14:14
*/
public enum SinosoftSource implements AuthSource {

/**
* 单点
*/
SINOSOFT {


/**
* 授权的api
*
* @return url
*/
@Override
public String authorize() {


return Oauth2EnumContainer.oauth2WebServer + \”/user/authorize\”;
}

/**
* 获取accessToken的api
*
* @return url
*/
@Override
public String accessToken() {


return Oauth2EnumContainer.oauth2ServerIp + \”/sys/oauth2Server/getTokenByCode\”;
}

/**
* 获取用户信息的api
*
* @return url
*/
@Override
public String userInfo() {


return Oauth2EnumContainer.oauth2ServerIp + \”/sys/loginByToken\”;
}
};

@Component
static class Oauth2EnumContainer {


public static String oauth2WebServer;
public static String oauth2Server;
public static String oauth2ServerIp;

@Value(\”${justauth.extend.config.SINOSOFT.oauth2WebServer}\”)
public void getOauth2WebServer(String oauth2WebServer) {


Oauth2EnumContainer.oauth2WebServer = oauth2WebServer;
}

@Value(\”${justauth.extend.config.SINOSOFT.oauth2Server}\”)
public void getOauth2Server(String oauth2Server) {


Oauth2EnumContainer.oauth2Server = oauth2Server;
}

@Value(\”${justauth.extend.config.SINOSOFT.oauth2ServerIp}\”)
public void getOauth2ServerIp(String oauth2ServerIp) {


Oauth2EnumContainer.oauth2ServerIp = oauth2ServerIp;
}
}
}

package org.jeecg.config.oauth2;

import cn.hutool.http.*;
import cn.hutool.json.JSONUtil;
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.exception.AuthException;
import me.zhyd.oauth.log.Log;
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.AuthChecker;
import me.zhyd.oauth.utils.StringUtils;
import me.zhyd.oauth.utils.UrlBuilder;

import java.util.HashMap;
import java.util.Map;

public class Oauth2Request extends AuthDefaultRequest {


private final int timeout = 20000;

public Oauth2Request(AuthConfig config) {


super(config, SinosoftSource.SINOSOFT);
}

public Oauth2Request(AuthConfig config, AuthStateCache authStateCache) {


super(config, SinosoftSource.SINOSOFT, authStateCache);
}

@Override
public AuthResponse<Object> login(AuthCallback authCallback) {


try {


AuthChecker.checkCode(this.source, authCallback);
AuthToken authToken = this.getAccessToken(authCallback);
AuthUser user = this.getUserInfo(authToken);
return AuthResponse.builder().code(AuthResponseStatus.SUCCESS.getCode()).data(user).build();
} catch (Exception e) {


Log.error(\”Failed to login with oauth authorization.\”, e);
int errorCode = AuthResponseStatus.FAILURE.getCode();
String errorMsg = e.getMessage();
if (e instanceof AuthException) {


AuthException authException = (AuthException) e;
errorCode = authException.getErrorCode();
if (StringUtils.isNotEmpty(authException.getErrorMsg())) {


errorMsg = authException.getErrorMsg();
}
}
return AuthResponse.builder().code(errorCode).msg(errorMsg).build();
}
}

@Override
protected AuthToken getAccessToken(AuthCallback authCallback) {


String accessTokenUrl = super.accessTokenUrl(authCallback.getCode());
HttpRequest request = HttpUtil.createRequest(Method.GET, accessTokenUrl);
HttpResponse execute = request.execute();
String body = execute.body();
JSONObject jsonObject = JSONObject.parseObject(body);
String accessToken = jsonObject.getString(\”result\”);
AuthToken authToken = AuthToken.builder().accessToken(accessToken).build();
return authToken;
}

@Override
protected String accessTokenUrl(String code) {


return UrlBuilder.fromBaseUrl(this.source.accessToken()).build();
}

@Override
protected AuthUser getUserInfo(AuthToken authToken) {


String url = super.userInfoUrl(authToken);
HttpRequest request = HttpUtil.createRequest(Method.POST, url);
JSONObject params = new JSONObject();
params.put(\”token\”,authToken.getAccessToken());
request.body(params.toJSONString());
HttpResponse execute = request.execute();
String body = execute.body();
JSONObject jsonObject = JSONObject.parseObject(body);
JSONObject result = jsonObject.getJSONObject(\”result\”);
JSONObject userInfo = result.getJSONObject(\”userInfo\”);
String token = result.getString(\”token\”);
authToken.setAccessToken(token);
return AuthUser.builder().rawUserInfo(userInfo).token(authToken).build();
}

@Override
protected String userInfoUrl(AuthToken authToken) {


return UrlBuilder.fromBaseUrl(this.source.userInfo()).build();
}

@Override
public String authorize(String state) {


return UrlBuilder.fromBaseUrl(this.source.authorize()).queryParam(\”client_id\”, this.config.getClientId()).queryParam(\”redirect_uri\”, this.config.getRedirectUri()).build();
}
}

//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by FernFlower decompiler)
//

package me.zhyd.oauth.request;

import com.xkcoding.http.util.UrlUtil;
import java.util.List;
import me.zhyd.oauth.cache.AuthDefaultStateCache;
import me.zhyd.oauth.cache.AuthStateCache;
import me.zhyd.oauth.config.AuthConfig;
import me.zhyd.oauth.config.AuthSource;
import me.zhyd.oauth.enums.AuthResponseStatus;
import me.zhyd.oauth.exception.AuthException;
import me.zhyd.oauth.log.Log;
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.utils.AuthChecker;
import me.zhyd.oauth.utils.HttpUtils;
import me.zhyd.oauth.utils.StringUtils;
import me.zhyd.oauth.utils.UrlBuilder;
import me.zhyd.oauth.utils.UuidUtils;

public abstract class AuthDefaultRequest implements AuthRequest {


protected AuthConfig config;
protected AuthSource source;
protected AuthStateCache authStateCache;

public AuthDefaultRequest(AuthConfig config, AuthSource source) {


this(config, source, AuthDefaultStateCache.INSTANCE);
}

public AuthDefaultRequest(AuthConfig config, AuthSource source, AuthStateCache authStateCache) {


this.config = config;
this.source = source;
this.authStateCache = authStateCache;
if (!AuthChecker.isSupportedAuth(config, source)) {


throw new AuthException(AuthResponseStatus.PARAMETER_INCOMPLETE, source);
} else {


AuthChecker.checkConfig(config, source);
}
}

protected abstract AuthToken getAccessToken(AuthCallback var1);

protected abstract AuthUser getUserInfo(AuthToken var1);

public AuthResponse login(AuthCallback authCallback) {


try {


AuthChecker.checkCode(this.source, authCallback);
if (!this.config.isIgnoreCheckState()) {


AuthChecker.checkState(authCallback.getState(), this.source, this.authStateCache);
}

AuthToken authToken = this.getAccessToken(authCallback);
AuthUser user = this.getUserInfo(authToken);
return AuthResponse.builder().code(AuthResponseStatus.SUCCESS.getCode()).data(user).build();
} catch (Exception var4) {


Log.error(\”Failed to login with oauth authorization.\”, var4);
return this.responseError(var4);
}
}

private AuthResponse responseError(Exception e) {


int errorCode = AuthResponseStatus.FAILURE.getCode();
String errorMsg = e.getMessage();
if (e instanceof AuthException) {


AuthException authException = (AuthException)e;
errorCode = authException.getErrorCode();
if (StringUtils.isNotEmpty(authException.getErrorMsg())) {


errorMsg = authException.getErrorMsg();
}
}

return AuthResponse.builder().code(errorCode).msg(errorMsg).build();
}

/** @deprecated */
@Deprecated
public String authorize() {


return this.authorize((String)null);
}

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(\”state\”, this.getRealState(state)).build();
}

protected String accessTokenUrl(String code) {


return UrlBuilder.fromBaseUrl(this.source.accessToken()).queryParam(\”code\”, code).queryParam(\”client_id\”, this.config.getClientId()).queryParam(\”client_secret\”, this.config.getClientSecret

赞(0)
未经允许不得转载:网硕互联帮助中心 » Oauth2Request单点登录获取accesstoken和userinfo
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!