|  | @@ -1,8 +1,15 @@
 | 
	
		
			
				|  |  |  package com.yonge.cooleshow.auth.core.provider;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -import java.util.Date;
 | 
	
		
			
				|  |  | -import java.util.Objects;
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | +import com.microsvc.toolkit.config.jwt.utils.RsaKeyHelper;
 | 
	
		
			
				|  |  | +import com.yonge.cooleshow.auth.api.dto.SysUserInfo;
 | 
	
		
			
				|  |  | +import com.yonge.cooleshow.auth.api.entity.LoginEntity;
 | 
	
		
			
				|  |  | +import com.yonge.cooleshow.auth.api.entity.SysUser;
 | 
	
		
			
				|  |  | +import com.yonge.cooleshow.auth.config.token.PhoneAuthenticationToken;
 | 
	
		
			
				|  |  | +import com.yonge.cooleshow.auth.service.SysUserDeviceService;
 | 
	
		
			
				|  |  | +import com.yonge.cooleshow.auth.service.SysUserService;
 | 
	
		
			
				|  |  | +import com.yonge.cooleshow.common.service.IdGeneratorService;
 | 
	
		
			
				|  |  | +import com.yonge.toolset.base.exception.BizException;
 | 
	
		
			
				|  |  | +import lombok.extern.slf4j.Slf4j;
 | 
	
		
			
				|  |  |  import org.apache.commons.lang3.StringUtils;
 | 
	
		
			
				|  |  |  import org.springframework.security.authentication.BadCredentialsException;
 | 
	
		
			
				|  |  |  import org.springframework.security.authentication.InternalAuthenticationServiceException;
 | 
	
	
		
			
				|  | @@ -12,16 +19,15 @@ import org.springframework.security.core.AuthenticationException;
 | 
	
		
			
				|  |  |  import org.springframework.security.core.userdetails.UserDetails;
 | 
	
		
			
				|  |  |  import org.springframework.security.core.userdetails.UserDetailsService;
 | 
	
		
			
				|  |  |  import org.springframework.security.core.userdetails.UsernameNotFoundException;
 | 
	
		
			
				|  |  | +import org.springframework.security.jwt.Jwt;
 | 
	
		
			
				|  |  | +import org.springframework.security.jwt.JwtHelper;
 | 
	
		
			
				|  |  | +import org.springframework.security.jwt.crypto.sign.RsaVerifier;
 | 
	
		
			
				|  |  |  import org.springframework.transaction.annotation.Transactional;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -import com.yonge.cooleshow.auth.api.dto.SysUserInfo;
 | 
	
		
			
				|  |  | -import com.yonge.cooleshow.auth.api.entity.LoginEntity;
 | 
	
		
			
				|  |  | -import com.yonge.cooleshow.auth.api.entity.SysUser;
 | 
	
		
			
				|  |  | -import com.yonge.cooleshow.auth.config.token.PhoneAuthenticationToken;
 | 
	
		
			
				|  |  | -import com.yonge.cooleshow.auth.service.SysUserDeviceService;
 | 
	
		
			
				|  |  | -import com.yonge.cooleshow.auth.service.SysUserService;
 | 
	
		
			
				|  |  | -import com.yonge.cooleshow.common.service.IdGeneratorService;
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | +import java.security.interfaces.RSAPublicKey;
 | 
	
		
			
				|  |  | +import java.util.Date;
 | 
	
		
			
				|  |  | +import java.util.Objects;
 | 
	
		
			
				|  |  | +@Slf4j
 | 
	
		
			
				|  |  |  public class PhoneAuthenticationProvider extends AbstractAuthenticationProvider {
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      private UserDetailsService userDetailsService;
 | 
	
	
		
			
				|  | @@ -49,13 +55,32 @@ public class PhoneAuthenticationProvider extends AbstractAuthenticationProvider
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          String smsCode = loginEntity.getSmsCode();
 | 
	
		
			
				|  |  |          String phone = loginEntity.getPhone();
 | 
	
		
			
				|  |  | +        // 二维码登录
 | 
	
		
			
				|  |  |          String qrCode = loginEntity.getQrCode();
 | 
	
		
			
				|  |  | -        if (StringUtils.isNotEmpty(qrCode) && StringUtils.isEmpty(smsCode)) {
 | 
	
		
			
				|  |  | +        // 授权Token登录
 | 
	
		
			
				|  |  | +        String authToken = loginEntity.getAuthToken();
 | 
	
		
			
				|  |  | +        if (StringUtils.isNotEmpty(qrCode)) {
 | 
	
		
			
				|  |  |              // 二维码验证
 | 
	
		
			
				|  |  |              boolean b = sysUserService.verifyQrCode(phone, qrCode);
 | 
	
		
			
				|  |  |              if (!b) {
 | 
	
		
			
				|  |  |                  throw new BadCredentialsException("二维码校验失败");
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  | +        } else if (StringUtils.isNotEmpty(authToken)) {
 | 
	
		
			
				|  |  | +            // 授权authToken登录
 | 
	
		
			
				|  |  | +            try {
 | 
	
		
			
				|  |  | +                RSAPublicKey rsaPublicKey = RsaKeyHelper.getRSAPublicKey("jmedu", "dayaedu", "jmedu.jks", "dayaedu");
 | 
	
		
			
				|  |  | +                Jwt jwt = JwtHelper.decodeAndVerify(authToken, new RsaVerifier(rsaPublicKey));
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                //获取jwt原始内容
 | 
	
		
			
				|  |  | +                String claims = jwt.getClaims();
 | 
	
		
			
				|  |  | +                if (StringUtils.isEmpty(claims)) {
 | 
	
		
			
				|  |  | +                    throw new BizException("三方授权登录失败");
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  | +                log.info("retrieveUser claims={}", claims);
 | 
	
		
			
				|  |  | +            } catch (Exception e) {
 | 
	
		
			
				|  |  | +                log.error("retrieveUser authToken={}", authToken, e);
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |          } else {
 | 
	
		
			
				|  |  |              // 验证码验证
 | 
	
		
			
				|  |  |              boolean b = smsCodeService.verifyValidCode(phone, smsCode, "SMS_VERIFY_CODE_LOGIN");
 |