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.props.IamSsoProperties;
|
||||
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.exception.UserInvalidException;
|
||||
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.tool.api.R;
|
||||
import org.springblade.core.tool.utils.StringUtil;
|
||||
import org.springblade.core.tool.utils.StringPool;
|
||||
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.enums.UserType;
|
||||
import org.springframework.core.Ordered;
|
||||
import org.springframework.core.annotation.Order;
|
||||
import org.springframework.http.HttpHeaders;
|
||||
@@ -118,13 +122,8 @@ public class IamSsoTokenGranter extends AuthorizationCodeGranter {
|
||||
throw new UserInvalidException(OAuth2TokenConstant.USER_NOT_FOUND);
|
||||
}
|
||||
|
||||
R<UserInfo> result = userClient.userInfo(request.getTenantId(), accountNo);
|
||||
if (!result.isSuccess() || result.getData() == null) {
|
||||
log.warn("IAM统一身份认证未匹配到本系统账号,tenantId={}, accountNo={}", request.getTenantId(), accountNo);
|
||||
throw new UserInvalidException(OAuth2TokenConstant.USER_NOT_FOUND);
|
||||
}
|
||||
|
||||
OAuth2User user = TokenUtil.convertUser(result.getData(), request);
|
||||
UserInfo userInfo = loadOrCreateIamUser(request, profileResponse, accountNo);
|
||||
OAuth2User user = TokenUtil.convertUser(userInfo, request);
|
||||
if (user == null) {
|
||||
throw new UserInvalidException(OAuth2TokenConstant.USER_NOT_FOUND);
|
||||
}
|
||||
@@ -132,6 +131,41 @@ public class IamSsoTokenGranter extends AuthorizationCodeGranter {
|
||||
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) {
|
||||
return StringUtil.isNotBlank(properties.getRedirectUri()) && StringUtil.equals(properties.getRedirectUri(), request.getRedirectUri());
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user