OAuth2 grant_type=password fix

OAuth2 grant_type=password fix
This commit is contained in:
MaxKey
2020-12-19 11:16:08 +08:00
parent ba681ed7ca
commit 3497aa5d26
3 changed files with 50 additions and 8 deletions

View File

@@ -12,9 +12,19 @@
*/
package org.maxkey.authz.oauth2.provider;
import java.util.ArrayList;
import org.maxkey.authn.AbstractAuthenticationProvider;
import org.maxkey.authn.SigninPrincipal;
import org.maxkey.authn.online.OnlineTicket;
import org.maxkey.domain.UserInfo;
import org.maxkey.persistence.db.LoginService;
import org.springframework.security.core.userdetails.User;
import org.maxkey.web.WebConstants;
import org.maxkey.web.WebContext;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.core.userdetails.UsernameNotFoundException;
@@ -24,7 +34,8 @@ import org.springframework.security.core.userdetails.UsernameNotFoundException;
*
*/
public class OAuth2UserDetailsService implements UserDetailsService {
private static final Logger _logger =
LoggerFactory.getLogger(OAuth2UserDetailsService.class);
LoginService loginService;
@@ -42,8 +53,27 @@ public class OAuth2UserDetailsService implements UserDetailsService {
throw new UsernameNotFoundException(e.getMessage(), e);
}
String onlineTickitId = WebConstants.ONLINE_TICKET_PREFIX + "-" + java.util.UUID.randomUUID().toString().toLowerCase();
return new User(username, userInfo.getPassword(), loginService.grantAuthority(userInfo));
SigninPrincipal signinPrincipal = new SigninPrincipal(userInfo);
OnlineTicket onlineTicket = new OnlineTicket(onlineTickitId);
//set OnlineTicket
signinPrincipal.setOnlineTicket(onlineTicket);
ArrayList<GrantedAuthority> grantedAuthoritys = loginService.grantAuthority(userInfo);
signinPrincipal.setAuthenticated(true);
for(GrantedAuthority administratorsAuthority : AbstractAuthenticationProvider.grantedAdministratorsAuthoritys) {
if(grantedAuthoritys.contains(administratorsAuthority)) {
signinPrincipal.setRoleAdministrators(true);
_logger.trace("ROLE ADMINISTRATORS Authentication .");
}
}
_logger.debug("Granted Authority " + grantedAuthoritys);
signinPrincipal.setGrantedAuthorityApps(grantedAuthoritys);
return signinPrincipal;
}
}