diff --git a/maxkey-authentications/maxkey-authentication-provider-mgt/src/main/java/org/dromara/maxkey/authn/support/jwt/JwtLoginService.java b/maxkey-authentications/maxkey-authentication-provider-mgt/src/main/java/org/dromara/maxkey/authn/support/jwt/JwtLoginService.java deleted file mode 100644 index f1c4a2da2..000000000 --- a/maxkey-authentications/maxkey-authentication-provider-mgt/src/main/java/org/dromara/maxkey/authn/support/jwt/JwtLoginService.java +++ /dev/null @@ -1,135 +0,0 @@ -/* - * Copyright [2020] [MaxKey of copyright http://www.maxkey.top] - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - - -package org.dromara.maxkey.authn.support.jwt; - -import com.nimbusds.jose.JOSEException; -import com.nimbusds.jose.JWSAlgorithm; -import com.nimbusds.jose.JWSHeader; -import com.nimbusds.jose.crypto.RSASSAVerifier; -import com.nimbusds.jose.jwk.RSAKey; -import com.nimbusds.jwt.JWT; -import com.nimbusds.jwt.JWTClaimsSet; -import com.nimbusds.jwt.PlainJWT; -import com.nimbusds.jwt.SignedJWT; -import java.util.Date; -import java.util.UUID; - -import org.dromara.maxkey.crypto.jwt.signer.service.impl.DefaultJwtSigningAndValidationService; -import org.dromara.maxkey.web.WebContext; -import org.joda.time.DateTime; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - - -public class JwtLoginService { - private static final Logger _logger = LoggerFactory.getLogger(JwtLoginService.class); - - String issuer; - - DefaultJwtSigningAndValidationService jwtSignerValidationService; - - public JwtLoginService( - DefaultJwtSigningAndValidationService jwtSignerValidationService, - String issuer - ) { - this.jwtSignerValidationService = jwtSignerValidationService; - this.issuer = issuer; - } - - public String buildLoginJwt() { - _logger.debug("build Login JWT ."); - - DateTime currentDateTime = DateTime.now(); - Date expirationTime = currentDateTime.plusMinutes(5).toDate(); - _logger.debug("Expiration Time : " + expirationTime); - JWTClaimsSet jwtClaims = new JWTClaimsSet.Builder().subject(WebContext.getSession().getId()) - .expirationTime(expirationTime).issuer(getIssuer()) - .issueTime(currentDateTime.toDate()).jwtID(UUID.randomUUID().toString()).build(); - - JWT jwtToken = new PlainJWT(jwtClaims); - - _logger.info("JWT Claims : " + jwtClaims.toString()); - - JWSAlgorithm signingAlg = jwtSignerValidationService.getDefaultSigningAlgorithm(); - - jwtToken = new SignedJWT(new JWSHeader(signingAlg), jwtClaims); - // sign it with the server's key - jwtSignerValidationService.signJwt((SignedJWT) jwtToken); - - String tokenString = jwtToken.serialize(); - _logger.debug("JWT Token : " + tokenString); - return tokenString; - } - - public SignedJWT jwtTokenValidation(String jwt) { - SignedJWT signedJWT = null; - JWTClaimsSet jwtClaimsSet = null; - try { - RSASSAVerifier rsaSSAVerifier = - new RSASSAVerifier(((RSAKey) jwtSignerValidationService.getAllPublicKeys() - .get(jwtSignerValidationService.getDefaultSignerKeyId())).toRSAPublicKey()); - - signedJWT = SignedJWT.parse(jwt); - - if (signedJWT.verify(rsaSSAVerifier)) { - jwtClaimsSet = signedJWT.getJWTClaimsSet(); - boolean isIssuerMatches = jwtClaimsSet.getIssuer().equals(getIssuer()); - boolean isExpiration = (new DateTime()).isBefore( - jwtClaimsSet.getExpirationTime().getTime()); - - _logger.debug("Signed JWT {}" , signedJWT.getPayload()); - _logger.debug("Subject is {}" , jwtClaimsSet.getSubject()); - _logger.debug("ExpirationTime Validation {}" ,isExpiration); - _logger.debug("JWT ClaimsSet Issuer {}, Metadata Issuer {}, Issuer is matches {}" , - jwtClaimsSet.getIssuer(), getIssuer(), isIssuerMatches - ); - - if ( isIssuerMatches && isExpiration ) { - return signedJWT; - } - }else { - _logger.debug("JWT Signer Verify false."); - } - } catch (java.text.ParseException e) { - // Invalid signed JWT encoding - _logger.error("Invalid signed JWT encoding ",e); - } catch (JOSEException e) { - _logger.error("JOSEException ",e); - } - return null; - } - - public void setJwtSignerValidationService(DefaultJwtSigningAndValidationService jwtSignerValidationService) { - this.jwtSignerValidationService = jwtSignerValidationService; - } - - public DefaultJwtSigningAndValidationService getJwtSignerValidationService() { - return jwtSignerValidationService; - } - - public String getIssuer() { - return issuer; - } - - public void setIssuer(String issuer) { - this.issuer = issuer; - } - - - -} diff --git a/maxkey-authentications/maxkey-authentication-provider-mgt/src/main/java/org/dromara/maxkey/autoconfigure/JwtAuthnAutoConfiguration.java b/maxkey-authentications/maxkey-authentication-provider-mgt/src/main/java/org/dromara/maxkey/autoconfigure/JwtAuthnAutoConfiguration.java deleted file mode 100644 index bf4e32e6f..000000000 --- a/maxkey-authentications/maxkey-authentication-provider-mgt/src/main/java/org/dromara/maxkey/autoconfigure/JwtAuthnAutoConfiguration.java +++ /dev/null @@ -1,89 +0,0 @@ -/* - * Copyright [2020] [MaxKey of copyright http://www.maxkey.top] - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - - -package org.dromara.maxkey.autoconfigure; - -import com.nimbusds.jose.JOSEException; -import java.security.NoSuchAlgorithmException; -import java.security.spec.InvalidKeySpecException; - -import org.dromara.maxkey.authn.support.jwt.JwtLoginService; -import org.dromara.maxkey.crypto.jose.keystore.JWKSetKeyStore; -import org.dromara.maxkey.crypto.jwt.signer.service.impl.DefaultJwtSigningAndValidationService; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Qualifier; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.boot.autoconfigure.AutoConfiguration; -import org.springframework.context.annotation.Bean; -import org.springframework.core.io.ClassPathResource; - - -@AutoConfiguration -public class JwtAuthnAutoConfiguration { - private static final Logger _logger = LoggerFactory.getLogger(JwtAuthnAutoConfiguration.class); - - /** - * jwt Login JwkSetKeyStore. - * @return - */ - @Bean - JWKSetKeyStore jwtLoginJwkSetKeyStore() { - JWKSetKeyStore jwkSetKeyStore = new JWKSetKeyStore(); - ClassPathResource classPathResource = new ClassPathResource("/config/loginjwkkeystore.jwks"); - jwkSetKeyStore.setLocation(classPathResource); - _logger.debug("JWT Login JwkSet KeyStore init."); - return jwkSetKeyStore; - } - - /** - * jwt Login ValidationService. - * @return - * @throws JOSEException - * @throws InvalidKeySpecException - * @throws NoSuchAlgorithmException - */ - @Bean - DefaultJwtSigningAndValidationService jwtLoginValidationService( - @Qualifier("jwtLoginJwkSetKeyStore") JWKSetKeyStore jwtLoginJwkSetKeyStore) - throws NoSuchAlgorithmException, InvalidKeySpecException, JOSEException { - DefaultJwtSigningAndValidationService jwtSignerValidationService = - new DefaultJwtSigningAndValidationService(jwtLoginJwkSetKeyStore); - jwtSignerValidationService.setDefaultSignerKeyId("maxkey_rsa"); - jwtSignerValidationService.setDefaultSigningAlgorithmName("RS256"); - _logger.debug("JWT Login Signing and Validation init."); - return jwtSignerValidationService; - } - - /** - * Jwt LoginService. - * @return - */ - @Bean - JwtLoginService jwtLoginService( - @Value("${maxkey.login.jwt.issuer}") - String issuer, - @Qualifier("jwtLoginValidationService") - DefaultJwtSigningAndValidationService jwtLoginValidationService) { - JwtLoginService jwtLoginService = new JwtLoginService( - jwtLoginValidationService, - issuer - ); - _logger.debug("JWT Login Service init."); - return jwtLoginService; - } -}