一、该问题的重现步骤是什么?
1. BladeX2.8.1参照SocialTokenGranter新增登录模式后,导致账号密码认证方式报错
2.
org.springblade.auth.granter;
org.springblade.auth.constant.AuthConstant;
org.springblade.auth.service.BladeUserDetails;
org.springblade.auth.utils.TokenUtil;
org.springblade.core.tool.api.R;
org.springblade.core.tool.support.Kv;
org.springblade.core.tool.utils.Func;
org.springblade.core.tool.utils.WebUtil;
org.springblade.system.user.entity.User;
org.springblade.system.user.entity.UserInfo;
org.springblade.system.user.feign.IUserClient;
org.springframework.security.authentication.AbstractAuthenticationToken;
org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
org.springframework.security.core.Authentication;
org.springframework.security.core.authority.AuthorityUtils;
org.springframework.security.oauth2.common.exceptions.InvalidGrantException;
org.springframework.security.oauth2.provider.*;
org.springframework.security.oauth2.provider.token.AbstractTokenGranter;
org.springframework.security.oauth2.provider.token.AuthorizationServerTokenServices;
javax.servlet.http.HttpServletRequest;
java.util.LinkedHashMap;
java.util.Map;
SecretFreeTokenGranter AbstractTokenGranter {
String = ;
IUserClient ;
SecretFreeTokenGranter(AuthorizationServerTokenServices tokenServices, ClientDetailsService clientDetailsService, OAuth2RequestFactory requestFactory, IUserClient userClient) {
(tokenServices, clientDetailsService, requestFactory, );
.= userClient;
}
OAuth2Authentication getOAuth2Authentication(ClientDetails client, TokenRequest tokenRequest) {
HttpServletRequest request = WebUtil.();
String tenantId = Func.(request.getHeader(TokenUtil.), TokenUtil.);
Map parameters = LinkedHashMap<>(tokenRequest.getRequestParameters());
String account = parameters.get();
String password = parameters.get();
R result = .userAuthSecretFree(tenantId, account, password);
BladeUserDetails bladeUserDetails;
(result.isSuccess()) {
User user = result.getData().getUser();
Kv detail = result.getData().getDetail();
(user == ) {
InvalidGrantException();
}
bladeUserDetails = BladeUserDetails(user.getId(),
tenantId, result.getData().getOauthId(), user.getName(), user.getRealName(), user.getDeptId(), user.getPostId(), user.getRoleId(), user.getUserCategory(), Func.(result.getData().getRoles()), Func.(user.getAvatar(), TokenUtil.),
user.getAccount(), AuthConstant.+ user.getPassword(), detail, , , , ,
AuthorityUtils.(Func.(result.getData().getRoles())), user.getHisId(), user.getSign());
} {
InvalidGrantException();
}
Authentication userAuth = UsernamePasswordAuthenticationToken(bladeUserDetails, , bladeUserDetails.getAuthorities());
((AbstractAuthenticationToken) userAuth).setDetails(parameters);
OAuth2Request storedOAuth2Request = getRequestFactory().createOAuth2Request(client, tokenRequest);
OAuth2Authentication(storedOAuth2Request, userAuth);
}
} 3.
<=== 401 POST: /blade-auth/oauth/token?tenantId=000000&username=admin&password=21232f297a57a5a743894a0e4a801fc3&grant_type=password&scope=all&type=account
===Headers=== transfer-encoding: chunked
===Headers=== Access-Control-Allow-Headers: X-Requested-With, Tenant-Id, Blade-Auth, Content-Type, Authorization, credential, X-XSRF-TOKEN, token, username, client, knfie4j-gateway-request, request-origion
===Headers=== Access-Control-Allow-Methods: GET,POST,PUT,DELETE,OPTIONS,HEAD
===Headers=== Access-Control-Allow-Origin: *
===Headers=== Access-Control-Expose-Headers: *
===Headers=== Access-Control-Max-Age: 18000L
===Headers=== Access-Control-Allow-Credentials: true
===Headers=== Cache-Control: no-store
===Headers=== X-XSS-Protection: 1; mode=block
===Headers=== Pragma: no-cache
===Headers=== X-Frame-Options: DENY
===Headers=== Date: Mon, 06 Sep 2021 12:31:36 GMT
===Headers=== WWW-Authenticate: Bearer error="invalid_client", error_description="Bad client credentials"
===Headers=== X-Content-Type-Options: nosniff
===Headers=== Content-Type: application/json;charset=UTF-8
===Headers=== connection: close
================ Gateway Response End =================
二、你期待的结果是什么?实际看到的又是什么?
三、你正在使用的是什么产品,什么版本?在什么操作系统上?
四、请提供详细的错误堆栈信息,这很重要。
五、若有更多详细信息,请在下面提供。
扫一扫访问 Blade技术社区 移动端