IAM对接调试
This commit is contained in:
@@ -31,6 +31,7 @@ import org.springblade.auth.dto.IamSsoProfileResponse;
|
|||||||
import org.springblade.auth.dto.IamSsoTokenResponse;
|
import org.springblade.auth.dto.IamSsoTokenResponse;
|
||||||
import org.springblade.auth.props.IamSsoProperties;
|
import org.springblade.auth.props.IamSsoProperties;
|
||||||
import org.springblade.auth.utils.TokenUtil;
|
import org.springblade.auth.utils.TokenUtil;
|
||||||
|
import org.springblade.core.mp.enums.StatusType;
|
||||||
import org.springblade.core.oauth2.constant.OAuth2TokenConstant;
|
import org.springblade.core.oauth2.constant.OAuth2TokenConstant;
|
||||||
import org.springblade.core.oauth2.exception.UserInvalidException;
|
import org.springblade.core.oauth2.exception.UserInvalidException;
|
||||||
import org.springblade.core.oauth2.granter.AuthorizationCodeGranter;
|
import org.springblade.core.oauth2.granter.AuthorizationCodeGranter;
|
||||||
@@ -42,8 +43,11 @@ import org.springblade.core.oauth2.service.OAuth2UserService;
|
|||||||
import org.springblade.core.redis.cache.BladeRedis;
|
import org.springblade.core.redis.cache.BladeRedis;
|
||||||
import org.springblade.core.tool.api.R;
|
import org.springblade.core.tool.api.R;
|
||||||
import org.springblade.core.tool.utils.StringUtil;
|
import org.springblade.core.tool.utils.StringUtil;
|
||||||
|
import org.springblade.core.tool.utils.StringPool;
|
||||||
import org.springblade.system.feign.IUserClient;
|
import org.springblade.system.feign.IUserClient;
|
||||||
|
import org.springblade.system.pojo.entity.User;
|
||||||
import org.springblade.system.pojo.entity.UserInfo;
|
import org.springblade.system.pojo.entity.UserInfo;
|
||||||
|
import org.springblade.system.pojo.enums.UserType;
|
||||||
import org.springframework.core.Ordered;
|
import org.springframework.core.Ordered;
|
||||||
import org.springframework.core.annotation.Order;
|
import org.springframework.core.annotation.Order;
|
||||||
import org.springframework.http.HttpHeaders;
|
import org.springframework.http.HttpHeaders;
|
||||||
@@ -118,13 +122,8 @@ public class IamSsoTokenGranter extends AuthorizationCodeGranter {
|
|||||||
throw new UserInvalidException(OAuth2TokenConstant.USER_NOT_FOUND);
|
throw new UserInvalidException(OAuth2TokenConstant.USER_NOT_FOUND);
|
||||||
}
|
}
|
||||||
|
|
||||||
R<UserInfo> result = userClient.userInfo(request.getTenantId(), accountNo);
|
UserInfo userInfo = loadOrCreateIamUser(request, profileResponse, accountNo);
|
||||||
if (!result.isSuccess() || result.getData() == null) {
|
OAuth2User user = TokenUtil.convertUser(userInfo, request);
|
||||||
log.warn("IAM统一身份认证未匹配到本系统账号,tenantId={}, accountNo={}", request.getTenantId(), accountNo);
|
|
||||||
throw new UserInvalidException(OAuth2TokenConstant.USER_NOT_FOUND);
|
|
||||||
}
|
|
||||||
|
|
||||||
OAuth2User user = TokenUtil.convertUser(result.getData(), request);
|
|
||||||
if (user == null) {
|
if (user == null) {
|
||||||
throw new UserInvalidException(OAuth2TokenConstant.USER_NOT_FOUND);
|
throw new UserInvalidException(OAuth2TokenConstant.USER_NOT_FOUND);
|
||||||
}
|
}
|
||||||
@@ -132,6 +131,41 @@ public class IamSsoTokenGranter extends AuthorizationCodeGranter {
|
|||||||
return user;
|
return user;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private UserInfo loadOrCreateIamUser(OAuth2Request request, IamSsoProfileResponse profileResponse, String accountNo) {
|
||||||
|
R<UserInfo> result = userClient.userInfo(request.getTenantId(), accountNo);
|
||||||
|
if (result.isSuccess() && result.getData() != null) {
|
||||||
|
return result.getData();
|
||||||
|
}
|
||||||
|
log.info("IAM统一身份认证未匹配到本系统账号,开始自动创建用户,tenantId={}, accountNo={}", request.getTenantId(), accountNo);
|
||||||
|
R<Boolean> saveResult = userClient.saveUser(buildIamUser(request, profileResponse, accountNo));
|
||||||
|
if (!saveResult.isSuccess() || !Boolean.TRUE.equals(saveResult.getData())) {
|
||||||
|
log.warn("IAM统一身份认证自动创建用户失败,tenantId={}, accountNo={}, msg={}", request.getTenantId(), accountNo, saveResult.getMsg());
|
||||||
|
throw new UserInvalidException(OAuth2TokenConstant.USER_NOT_FOUND);
|
||||||
|
}
|
||||||
|
R<UserInfo> createdResult = userClient.userInfo(request.getTenantId(), accountNo);
|
||||||
|
if (!createdResult.isSuccess() || createdResult.getData() == null) {
|
||||||
|
log.warn("IAM统一身份认证自动创建用户后未查询到用户,tenantId={}, accountNo={}", request.getTenantId(), accountNo);
|
||||||
|
throw new UserInvalidException(OAuth2TokenConstant.USER_NOT_FOUND);
|
||||||
|
}
|
||||||
|
return createdResult.getData();
|
||||||
|
}
|
||||||
|
|
||||||
|
private User buildIamUser(OAuth2Request request, IamSsoProfileResponse profileResponse, String accountNo) {
|
||||||
|
User user = new User();
|
||||||
|
user.setTenantId(request.getTenantId());
|
||||||
|
user.setUserType(UserType.WEB.getCategory());
|
||||||
|
user.setAccount(accountNo);
|
||||||
|
user.setPassword(accountNo);
|
||||||
|
user.setName(accountNo);
|
||||||
|
user.setRealName(accountNo);
|
||||||
|
user.setRoleId(StringPool.MINUS_ONE);
|
||||||
|
user.setDeptId(StringPool.MINUS_ONE);
|
||||||
|
user.setPostId(StringPool.MINUS_ONE);
|
||||||
|
user.setStatus(StatusType.ACTIVE.getType());
|
||||||
|
log.info("IAM统一身份认证自动创建用户参数,tenantId={}, accountNo={}, iamId={}", request.getTenantId(), accountNo, profileResponse.getId());
|
||||||
|
return user;
|
||||||
|
}
|
||||||
|
|
||||||
private boolean isIamRequest(OAuth2Request request) {
|
private boolean isIamRequest(OAuth2Request request) {
|
||||||
return StringUtil.isNotBlank(properties.getRedirectUri()) && StringUtil.equals(properties.getRedirectUri(), request.getRedirectUri());
|
return StringUtil.isNotBlank(properties.getRedirectUri()) && StringUtil.equals(properties.getRedirectUri(), request.getRedirectUri());
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user