diff --git a/maxkey-authentications/maxkey-authentication-otp/src/main/java/org/maxkey/password/onetimepwd/algorithm/KeyUriFormat.java b/maxkey-authentications/maxkey-authentication-otp/src/main/java/org/maxkey/password/onetimepwd/algorithm/OtpKeyUriFormat.java similarity index 83% rename from maxkey-authentications/maxkey-authentication-otp/src/main/java/org/maxkey/password/onetimepwd/algorithm/KeyUriFormat.java rename to maxkey-authentications/maxkey-authentication-otp/src/main/java/org/maxkey/password/onetimepwd/algorithm/OtpKeyUriFormat.java index 35d62c82..705dea30 100644 --- a/maxkey-authentications/maxkey-authentication-otp/src/main/java/org/maxkey/password/onetimepwd/algorithm/KeyUriFormat.java +++ b/maxkey-authentications/maxkey-authentication-otp/src/main/java/org/maxkey/password/onetimepwd/algorithm/OtpKeyUriFormat.java @@ -17,7 +17,7 @@ package org.maxkey.password.onetimepwd.algorithm; -public class KeyUriFormat { +public class OtpKeyUriFormat { public class Types { public static final String HOTP = "hotp"; @@ -38,7 +38,7 @@ public class KeyUriFormat { String account; - public KeyUriFormat() { + public OtpKeyUriFormat() { } @@ -46,7 +46,7 @@ public class KeyUriFormat { * @param type * @param secret */ - public KeyUriFormat(String type, String secret) { + public OtpKeyUriFormat(String type, String secret) { this.type = type; this.secret = secret; } @@ -56,12 +56,35 @@ public class KeyUriFormat { * @param secret * @param issuer */ - public KeyUriFormat(String type, String secret, String issuer) { + public OtpKeyUriFormat(String type, String secret, String issuer) { this.type = type; this.secret = secret; this.issuer = issuer; } + public OtpKeyUriFormat(String crypto, String type, String secret, String issuer, String domain, int digits, + Long counter, int period, String account) { + super(); + this.crypto = crypto; + this.type = type; + this.secret = secret; + this.issuer = issuer; + this.domain = domain; + this.digits = digits; + this.counter = counter; + this.period = period; + this.account = account; + } + + public OtpKeyUriFormat(String type, String issuer, String domain, int digits,int period) { + super(); + this.type = type; + this.issuer = issuer; + this.domain = domain; + this.digits = digits; + this.period = period; + } + /** * @return the type */ diff --git a/maxkey-authentications/maxkey-authentication-otp/src/main/java/org/maxkey/password/onetimepwd/impl/SmsOtpAuthn.java b/maxkey-authentications/maxkey-authentication-otp/src/main/java/org/maxkey/password/onetimepwd/impl/SmsOtpAuthn.java index dd18b829..241eeb46 100644 --- a/maxkey-authentications/maxkey-authentication-otp/src/main/java/org/maxkey/password/onetimepwd/impl/SmsOtpAuthn.java +++ b/maxkey-authentications/maxkey-authentication-otp/src/main/java/org/maxkey/password/onetimepwd/impl/SmsOtpAuthn.java @@ -18,17 +18,17 @@ package org.maxkey.password.onetimepwd.impl; import java.io.IOException; -import java.util.Properties; import org.maxkey.entity.UserInfo; import org.maxkey.password.onetimepwd.AbstractOtpAuthn; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.springframework.core.env.StandardEnvironment; public class SmsOtpAuthn extends AbstractOtpAuthn { private static final Logger logger = LoggerFactory.getLogger(SmsOtpAuthn.class); - protected Properties properties; + protected StandardEnvironment properties; @Override @@ -44,7 +44,7 @@ public class SmsOtpAuthn extends AbstractOtpAuthn { return true; } - public void setProperties(Properties properties) { + public void setProperties(StandardEnvironment properties) { this.properties = properties; } diff --git a/maxkey-authentications/maxkey-authentication-otp/src/main/java/org/maxkey/password/onetimepwd/impl/TimeBasedOtpAuthn.java b/maxkey-authentications/maxkey-authentication-otp/src/main/java/org/maxkey/password/onetimepwd/impl/TimeBasedOtpAuthn.java index 37eb4670..c3d48bc0 100644 --- a/maxkey-authentications/maxkey-authentication-otp/src/main/java/org/maxkey/password/onetimepwd/impl/TimeBasedOtpAuthn.java +++ b/maxkey-authentications/maxkey-authentication-otp/src/main/java/org/maxkey/password/onetimepwd/impl/TimeBasedOtpAuthn.java @@ -38,6 +38,12 @@ public class TimeBasedOtpAuthn extends AbstractOtpAuthn { dateFormat.setTimeZone(TimeZone.getTimeZone("UTC")); } + public TimeBasedOtpAuthn(int digits , int interval) { + dateFormat.setTimeZone(TimeZone.getTimeZone("UTC")); + super.digits = digits; + super.interval = interval; + } + @Override public boolean produce(UserInfo userInfo) { return true; diff --git a/maxkey-authentications/maxkey-authentication-otp/src/main/java/org/maxkey/password/onetimepwd/impl/sms/SmsOtpAuthnAliyun.java b/maxkey-authentications/maxkey-authentication-otp/src/main/java/org/maxkey/password/onetimepwd/impl/sms/SmsOtpAuthnAliyun.java index f60aa651..d21c78be 100644 --- a/maxkey-authentications/maxkey-authentication-otp/src/main/java/org/maxkey/password/onetimepwd/impl/sms/SmsOtpAuthnAliyun.java +++ b/maxkey-authentications/maxkey-authentication-otp/src/main/java/org/maxkey/password/onetimepwd/impl/sms/SmsOtpAuthnAliyun.java @@ -138,10 +138,10 @@ public class SmsOtpAuthnAliyun extends SmsOtpAuthn { e.printStackTrace(); } - this.accessKeyId = this.properties.getProperty("maxkey.otp.sms.aliyun.accesskeyid"); - this.accessSecret = this.properties.getProperty("maxkey.otp.sms.aliyun.accesssecret"); - this.templateCode = this.properties.getProperty("maxkey.otp.sms.aliyun.templatecode"); - this.signName = this.properties.getProperty("maxkey.otp.sms.aliyun.signname"); + this.accessKeyId = properties.getProperty("maxkey.otp.sms.aliyun.accesskeyid"); + this.accessSecret = properties.getProperty("maxkey.otp.sms.aliyun.accesssecret"); + this.templateCode = properties.getProperty("maxkey.otp.sms.aliyun.templatecode"); + this.signName = properties.getProperty("maxkey.otp.sms.aliyun.signname"); } } diff --git a/maxkey-authentications/maxkey-authentication-otp/src/main/java/org/maxkey/password/onetimepwd/impl/sms/SmsOtpAuthnTencentCloud.java b/maxkey-authentications/maxkey-authentication-otp/src/main/java/org/maxkey/password/onetimepwd/impl/sms/SmsOtpAuthnTencentCloud.java index 70d40e6a..c6da9fb2 100644 --- a/maxkey-authentications/maxkey-authentication-otp/src/main/java/org/maxkey/password/onetimepwd/impl/sms/SmsOtpAuthnTencentCloud.java +++ b/maxkey-authentications/maxkey-authentication-otp/src/main/java/org/maxkey/password/onetimepwd/impl/sms/SmsOtpAuthnTencentCloud.java @@ -55,7 +55,6 @@ public class SmsOtpAuthnTencentCloud extends SmsOtpAuthn { otpType = OtpTypes.SMS; } - @Override @@ -181,11 +180,11 @@ public class SmsOtpAuthnTencentCloud extends SmsOtpAuthn { e.printStackTrace(); } - this.secretId = this.properties.getProperty("maxkey.otp.sms.tencentcloud.secretid"); - this.secretKey = this.properties.getProperty("maxkey.otp.sms.tencentcloud.secretkey"); - this.smsSdkAppid = this.properties.getProperty("maxkey.otp.sms.tencentcloud.smssdkappid"); - this.templateId = this.properties.getProperty("maxkey.otp.sms.tencentcloud.templateid"); - this.sign = this.properties.getProperty("maxkey.otp.sms.tencentcloud.sign"); + this.secretId = properties.getProperty("maxkey.otp.sms.tencentcloud.secretid"); + this.secretKey = properties.getProperty("maxkey.otp.sms.tencentcloud.secretkey"); + this.smsSdkAppid = properties.getProperty("maxkey.otp.sms.tencentcloud.smssdkappid"); + this.templateId = properties.getProperty("maxkey.otp.sms.tencentcloud.templateid"); + this.sign = properties.getProperty("maxkey.otp.sms.tencentcloud.sign"); } } diff --git a/maxkey-authentications/maxkey-authentication-otp/src/main/java/org/maxkey/password/onetimepwd/impl/sms/SmsOtpAuthnYunxin.java b/maxkey-authentications/maxkey-authentication-otp/src/main/java/org/maxkey/password/onetimepwd/impl/sms/SmsOtpAuthnYunxin.java index 90c03cb9..80c1380a 100644 --- a/maxkey-authentications/maxkey-authentication-otp/src/main/java/org/maxkey/password/onetimepwd/impl/sms/SmsOtpAuthnYunxin.java +++ b/maxkey-authentications/maxkey-authentication-otp/src/main/java/org/maxkey/password/onetimepwd/impl/sms/SmsOtpAuthnYunxin.java @@ -212,9 +212,9 @@ public class SmsOtpAuthnYunxin extends SmsOtpAuthn { e.printStackTrace(); } - this.appKey = this.properties.getProperty("maxkey.otp.sms.yunxin.appkey"); - this.appSecret = this.properties.getProperty("maxkey.otp.sms.yunxin.appsecret"); - this.templateId = this.properties.getProperty("maxkey.otp.sms.yunxin.templateid"); + this.appKey = properties.getProperty("maxkey.otp.sms.yunxin.appkey"); + this.appSecret = properties.getProperty("maxkey.otp.sms.yunxin.appsecret"); + this.templateId = properties.getProperty("maxkey.otp.sms.yunxin.templateid"); } /** diff --git a/maxkey-authentications/maxkey-authentication-otp/src/test/java/org/maxkey/otp/algorithm/KeyUriFormatTest.java b/maxkey-authentications/maxkey-authentication-otp/src/test/java/org/maxkey/otp/algorithm/KeyUriFormatTest.java index a99c2cf2..e2e8427d 100644 --- a/maxkey-authentications/maxkey-authentication-otp/src/test/java/org/maxkey/otp/algorithm/KeyUriFormatTest.java +++ b/maxkey-authentications/maxkey-authentication-otp/src/test/java/org/maxkey/otp/algorithm/KeyUriFormatTest.java @@ -19,7 +19,7 @@ package org.maxkey.otp.algorithm; import java.io.File; -import org.maxkey.password.onetimepwd.algorithm.KeyUriFormat; +import org.maxkey.password.onetimepwd.algorithm.OtpKeyUriFormat; import org.maxkey.util.QRCode; import com.google.zxing.BarcodeFormat; @@ -29,7 +29,7 @@ import com.google.zxing.common.BitMatrix; public class KeyUriFormatTest { public static void main(String[] args) { try { - KeyUriFormat kuf=new KeyUriFormat(KeyUriFormat.Types.TOTP, + OtpKeyUriFormat kuf=new OtpKeyUriFormat(OtpKeyUriFormat.Types.TOTP, "GIWVWOL7EI5WLVZPDMROEPSTFBEVO77Q", "connsec.com"); kuf.setPeriod(60); diff --git a/maxkey-authentications/maxkey-authentication-social/src/main/java/org/maxkey/autoconfigure/SocialSignOnAutoConfiguration.java b/maxkey-authentications/maxkey-authentication-social/src/main/java/org/maxkey/autoconfigure/SocialSignOnAutoConfiguration.java index a807cc4d..b1eb3006 100644 --- a/maxkey-authentications/maxkey-authentication-social/src/main/java/org/maxkey/autoconfigure/SocialSignOnAutoConfiguration.java +++ b/maxkey-authentications/maxkey-authentication-social/src/main/java/org/maxkey/autoconfigure/SocialSignOnAutoConfiguration.java @@ -30,7 +30,6 @@ import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; -import org.springframework.context.support.PropertySourcesPlaceholderConfigurer; import org.springframework.core.env.StandardEnvironment; import org.springframework.jdbc.core.JdbcTemplate; @@ -44,26 +43,21 @@ public class SocialSignOnAutoConfiguration implements InitializingBean { @Bean(name = "socialSignOnProviderService") @ConditionalOnClass(SocialSignOnProvider.class) public SocialSignOnProviderService socialSignOnProviderService( - PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer) throws IOException { + StandardEnvironment environment) throws IOException { SocialSignOnProviderService socialSignOnProviderService = new SocialSignOnProviderService(); - - StandardEnvironment properties = (StandardEnvironment) propertySourcesPlaceholderConfigurer - .getAppliedPropertySources() - .get(PropertySourcesPlaceholderConfigurer.ENVIRONMENT_PROPERTIES_PROPERTY_SOURCE_NAME) - .getSource(); List socialSignOnProviderList = new ArrayList(); - String [] providerList =properties.getProperty("maxkey.login.socialsignon.providers").toString().split(","); + String [] providerList =environment.getProperty("maxkey.login.socialsignon.providers").toString().split(","); for(String provider : providerList) { - String providerName = properties.getProperty("maxkey.socialsignon."+provider+".provider.name"); - String icon=properties.getProperty("maxkey.socialsignon."+provider+".icon"); - String clientId=properties.getProperty("maxkey.socialsignon."+provider+".client.id"); - String clientSecret=properties.getProperty("maxkey.socialsignon."+provider+".client.secret"); - String sortOrder = properties.getProperty("maxkey.socialsignon."+provider+".sortorder"); - String agentId = properties.getProperty("maxkey.socialsignon."+provider+".agent.id"); - String hidden = properties.getProperty("maxkey.socialsignon."+provider+".hidden"); + String providerName = environment.getProperty("maxkey.socialsignon."+provider+".provider.name"); + String icon=environment.getProperty("maxkey.socialsignon."+provider+".icon"); + String clientId=environment.getProperty("maxkey.socialsignon."+provider+".client.id"); + String clientSecret=environment.getProperty("maxkey.socialsignon."+provider+".client.secret"); + String sortOrder = environment.getProperty("maxkey.socialsignon."+provider+".sortorder"); + String agentId = environment.getProperty("maxkey.socialsignon."+provider+".agent.id"); + String hidden = environment.getProperty("maxkey.socialsignon."+provider+".hidden"); SocialSignOnProvider socialSignOnProvider = new SocialSignOnProvider(); socialSignOnProvider.setProvider(provider); diff --git a/maxkey-webs/maxkey-web-maxkey/src/main/java/org/maxkey/MaxKeyConfig.java b/maxkey-webs/maxkey-web-maxkey/src/main/java/org/maxkey/MaxKeyConfig.java index 41258a2a..1cd8e6a4 100644 --- a/maxkey-webs/maxkey-web-maxkey/src/main/java/org/maxkey/MaxKeyConfig.java +++ b/maxkey-webs/maxkey-web-maxkey/src/main/java/org/maxkey/MaxKeyConfig.java @@ -22,7 +22,6 @@ import java.io.IOException; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.List; -import java.util.Properties; import java.util.stream.Collectors; import org.maxkey.authn.realm.jdbc.JdbcAuthenticationRealm; @@ -38,7 +37,7 @@ import org.maxkey.authn.support.rememberme.AbstractRemeberMeService; import org.maxkey.configuration.EmailConfig; import org.maxkey.constants.ConstantsPersistence; import org.maxkey.password.onetimepwd.AbstractOtpAuthn; -import org.maxkey.password.onetimepwd.algorithm.KeyUriFormat; +import org.maxkey.password.onetimepwd.algorithm.OtpKeyUriFormat; import org.maxkey.password.onetimepwd.impl.MailOtpAuthn; import org.maxkey.password.onetimepwd.impl.SmsOtpAuthn; import org.maxkey.password.onetimepwd.impl.TimeBasedOtpAuthn; @@ -60,6 +59,7 @@ import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; +import org.springframework.core.env.StandardEnvironment; import org.springframework.core.io.ClassPathResource; import org.springframework.core.io.Resource; import org.springframework.jdbc.core.JdbcTemplate; @@ -87,27 +87,22 @@ public class MaxKeyConfig implements InitializingBean { private static final Logger _logger = LoggerFactory.getLogger(MaxKeyConfig.class); - @Bean(name = "keyUriFormat") - public KeyUriFormat keyUriFormat( - @Value("${maxkey.otp.keyuri.format.type:totp}") - String keyuriFormatType, - @Value("${maxkey.otp.keyuri.format.domain:MaxKey.top}") - String keyuriFormatDomain, - @Value("${maxkey.otp.keyuri.format.issuer:MaxKey}") - String keyuriFormatIssuer, - @Value("${maxkey.otp.keyuri.format.digits:6}") - int keyuriFormatDigits, - @Value("${maxkey.otp.keyuri.format.period:30}") - int keyuriFormatPeriod) { + @Bean(name = "otpKeyUriFormat") + public OtpKeyUriFormat otpKeyUriFormat( + @Value("${maxkey.otp.policy.type:totp}") + String type, + @Value("${maxkey.otp.policy.domain:MaxKey.top}") + String domain, + @Value("${maxkey.otp.policy.issuer:MaxKey}") + String issuer, + @Value("${maxkey.otp.policy.digits:6}") + int digits, + @Value("${maxkey.otp.policy.period:30}") + int period) { - KeyUriFormat keyUriFormat=new KeyUriFormat(); - keyUriFormat.setType(keyuriFormatType); - keyUriFormat.setDomain(keyuriFormatDomain); - keyUriFormat.setIssuer(keyuriFormatIssuer); - keyUriFormat.setDigits(keyuriFormatDigits); - keyUriFormat.setPeriod(keyuriFormatPeriod); - _logger.debug("KeyUri Format " + keyUriFormat); - return keyUriFormat; + OtpKeyUriFormat otpKeyUriFormat=new OtpKeyUriFormat(type,issuer,domain,digits,period); + _logger.debug("OTP KeyUri Format " + otpKeyUriFormat); + return otpKeyUriFormat; } public AbstractAuthenticationRealm ldapAuthenticationRealm( @@ -194,18 +189,26 @@ public class MaxKeyConfig implements InitializingBean { } @Bean(name = "timeBasedOtpAuthn") - public TimeBasedOtpAuthn timeBasedOtpAuthn() { - TimeBasedOtpAuthn tfaOtpAuthn = new TimeBasedOtpAuthn(); + public TimeBasedOtpAuthn timeBasedOtpAuthn( + @Value("${maxkey.otp.policy.digits:6}") + int digits, + @Value("${maxkey.otp.policy.period:30}") + int period) { + TimeBasedOtpAuthn tfaOtpAuthn = new TimeBasedOtpAuthn(digits , period); _logger.debug("TimeBasedOtpAuthn inited."); return tfaOtpAuthn; } @Bean(name = "tfaOtpAuthn") public AbstractOtpAuthn tfaOptAuthn( - @Value("${maxkey.login.mfa.type}")String mfaType, - @Value("${maxkey.server.persistence}") int persistence, - RedisConnectionFactory redisConnFactory) { - AbstractOtpAuthn tfaOtpAuthn = new TimeBasedOtpAuthn(); + @Value("${maxkey.login.mfa.type}")String mfaType, + @Value("${maxkey.otp.policy.digits:6}") + int digits, + @Value("${maxkey.otp.policy.period:30}") + int period, + @Value("${maxkey.server.persistence}") int persistence, + RedisConnectionFactory redisConnFactory) { + AbstractOtpAuthn tfaOtpAuthn = new TimeBasedOtpAuthn(digits , period); _logger.debug("TimeBasedOtpAuthn inited."); if (persistence == ConstantsPersistence.REDIS) { @@ -251,14 +254,14 @@ public class MaxKeyConfig implements InitializingBean { @Bean(name = "smsOtpAuthn") public SmsOtpAuthn smsOtpAuthn( - @Value("${maxkey.otp.sms}")String optSmsProvider, + @Value("${maxkey.otp.sms.provider}")String provider, @Value("${maxkey.server.persistence}") int persistence, - Properties applicationProperty, + StandardEnvironment environment, RedisConnectionFactory redisConnFactory) { SmsOtpAuthn smsOtpAuthn = null; - if(optSmsProvider.equalsIgnoreCase("SmsOtpAuthnAliyun")) { + if(provider.equalsIgnoreCase("aliyun")) { smsOtpAuthn = new SmsOtpAuthnAliyun(); - }else if(optSmsProvider.equalsIgnoreCase("SmsOtpAuthnTencentCloud")) { + }else if(provider.equalsIgnoreCase("tencentcloud")) { smsOtpAuthn = new SmsOtpAuthnTencentCloud(); }else { smsOtpAuthn = new SmsOtpAuthnYunxin(); @@ -267,10 +270,11 @@ public class MaxKeyConfig implements InitializingBean { RedisOtpTokenStore redisOptTokenStore = new RedisOtpTokenStore(redisConnFactory); smsOtpAuthn.setOptTokenStore(redisOptTokenStore); } - smsOtpAuthn.setProperties(applicationProperty); + + smsOtpAuthn.setProperties(environment); smsOtpAuthn.initPropertys(); - _logger.debug("SmsOtpAuthn inited."); + _logger.debug("SmsOtpAuthn {} inited." ,smsOtpAuthn.getClass().getCanonicalName()); return smsOtpAuthn; } diff --git a/maxkey-webs/maxkey-web-maxkey/src/main/java/org/maxkey/web/contorller/OneTimePasswordController.java b/maxkey-webs/maxkey-web-maxkey/src/main/java/org/maxkey/web/contorller/OneTimePasswordController.java index 1880e6db..784b22ab 100644 --- a/maxkey-webs/maxkey-web-maxkey/src/main/java/org/maxkey/web/contorller/OneTimePasswordController.java +++ b/maxkey-webs/maxkey-web-maxkey/src/main/java/org/maxkey/web/contorller/OneTimePasswordController.java @@ -23,7 +23,7 @@ import org.apache.commons.codec.binary.Hex; import org.maxkey.crypto.Base32Utils; import org.maxkey.crypto.password.PasswordReciprocal; import org.maxkey.entity.UserInfo; -import org.maxkey.password.onetimepwd.algorithm.KeyUriFormat; +import org.maxkey.password.onetimepwd.algorithm.OtpKeyUriFormat; import org.maxkey.password.onetimepwd.algorithm.OtpSecret; import org.maxkey.persistence.service.UserInfoService; import org.maxkey.util.RQCodeUtils; @@ -53,8 +53,8 @@ public class OneTimePasswordController { private UserInfoService userInfoService; @Autowired - @Qualifier("keyUriFormat") - KeyUriFormat keyUriFormat; + @Qualifier("otpKeyUriFormat") + OtpKeyUriFormat otpKeyUriFormat; @Autowired @Qualifier("passwordReciprocal") @@ -65,13 +65,13 @@ public class OneTimePasswordController { ModelAndView modelAndView = new ModelAndView("safe/timeBased"); UserInfo userInfo = WebContext.getUserInfo(); String sharedSecret = passwordReciprocal.decoder(userInfo.getSharedSecret()); - keyUriFormat.setSecret(sharedSecret); - String otpauth = keyUriFormat.format(userInfo.getUsername()); + otpKeyUriFormat.setSecret(sharedSecret); + String otpauth = otpKeyUriFormat.format(userInfo.getUsername()); byte[] byteSharedSecret = Base32Utils.decode(sharedSecret); String hexSharedSecret = Hex.encodeHexString(byteSharedSecret); modelAndView.addObject("id", genRqCode(otpauth)); modelAndView.addObject("userInfo", userInfo); - modelAndView.addObject("format", keyUriFormat); + modelAndView.addObject("format", otpKeyUriFormat); modelAndView.addObject("sharedSecret", sharedSecret); modelAndView.addObject("hexSharedSecret", hexSharedSecret); return modelAndView; @@ -80,7 +80,7 @@ public class OneTimePasswordController { @RequestMapping(value = {"gen/timebased"}) public ModelAndView gentimebased() { UserInfo userInfo = WebContext.getUserInfo(); - byte[] byteSharedSecret = OtpSecret.generate(keyUriFormat.getCrypto()); + byte[] byteSharedSecret = OtpSecret.generate(otpKeyUriFormat.getCrypto()); String sharedSecret = Base32Utils.encode(byteSharedSecret); sharedSecret = passwordReciprocal.encode(sharedSecret); userInfo.setSharedSecret(sharedSecret); @@ -95,15 +95,15 @@ public class OneTimePasswordController { ModelAndView modelAndView = new ModelAndView("safe/counterBased"); UserInfo userInfo = WebContext.getUserInfo(); String sharedSecret = passwordReciprocal.decoder(userInfo.getSharedSecret()); - keyUriFormat.setSecret(sharedSecret); - keyUriFormat.setCounter(Long.parseLong(userInfo.getSharedCounter())); - String otpauth = keyUriFormat.format(userInfo.getUsername()); + otpKeyUriFormat.setSecret(sharedSecret); + otpKeyUriFormat.setCounter(Long.parseLong(userInfo.getSharedCounter())); + String otpauth = otpKeyUriFormat.format(userInfo.getUsername()); byte[] byteSharedSecret = Base32Utils.decode(sharedSecret); String hexSharedSecret = Hex.encodeHexString(byteSharedSecret); modelAndView.addObject("id", genRqCode(otpauth)); modelAndView.addObject("userInfo", userInfo); - modelAndView.addObject("format", keyUriFormat); + modelAndView.addObject("format", otpKeyUriFormat); modelAndView.addObject("sharedSecret", sharedSecret); modelAndView.addObject("hexSharedSecret", hexSharedSecret); return modelAndView; @@ -113,7 +113,7 @@ public class OneTimePasswordController { @RequestMapping(value = {"gen/counterbased"}) public ModelAndView gencounterbased() { UserInfo userInfo = WebContext.getUserInfo(); - byte[] byteSharedSecret = OtpSecret.generate(keyUriFormat.getCrypto()); + byte[] byteSharedSecret = OtpSecret.generate(otpKeyUriFormat.getCrypto()); String sharedSecret = Base32Utils.encode(byteSharedSecret); sharedSecret = passwordReciprocal.encode(sharedSecret); userInfo.setSharedSecret(sharedSecret); @@ -128,14 +128,14 @@ public class OneTimePasswordController { ModelAndView modelAndView = new ModelAndView("safe/hotp"); UserInfo userInfo = WebContext.getUserInfo(); String sharedSecret = passwordReciprocal.decoder(userInfo.getSharedSecret()); - keyUriFormat.setSecret(sharedSecret); - keyUriFormat.setCounter(Long.parseLong(userInfo.getSharedCounter())); - String otpauth = keyUriFormat.format(userInfo.getUsername()); + otpKeyUriFormat.setSecret(sharedSecret); + otpKeyUriFormat.setCounter(Long.parseLong(userInfo.getSharedCounter())); + String otpauth = otpKeyUriFormat.format(userInfo.getUsername()); byte[] byteSharedSecret = Base32Utils.decode(sharedSecret); String hexSharedSecret = Hex.encodeHexString(byteSharedSecret); modelAndView.addObject("id", genRqCode(otpauth)); modelAndView.addObject("userInfo", userInfo); - modelAndView.addObject("format", keyUriFormat); + modelAndView.addObject("format", otpKeyUriFormat); modelAndView.addObject("sharedSecret", sharedSecret); modelAndView.addObject("hexSharedSecret", hexSharedSecret); return modelAndView; @@ -145,7 +145,7 @@ public class OneTimePasswordController { @RequestMapping(value = {"gen/hotp"}) public ModelAndView genhotp() { UserInfo userInfo = WebContext.getUserInfo(); - byte[] byteSharedSecret = OtpSecret.generate(keyUriFormat.getCrypto()); + byte[] byteSharedSecret = OtpSecret.generate(otpKeyUriFormat.getCrypto()); String sharedSecret = Base32Utils.encode(byteSharedSecret); sharedSecret = passwordReciprocal.encode(sharedSecret); userInfo.setSharedSecret(sharedSecret); diff --git a/maxkey-webs/maxkey-web-maxkey/src/main/resources/application-http.properties b/maxkey-webs/maxkey-web-maxkey/src/main/resources/application-http.properties index d90d8ea4..a3050bf4 100644 --- a/maxkey-webs/maxkey-web-maxkey/src/main/resources/application-http.properties +++ b/maxkey-webs/maxkey-web-maxkey/src/main/resources/application-http.properties @@ -176,10 +176,10 @@ spring.kafka.producer.value-serializer =org.apache.kafka.common.seriali ############################################################################ #SMS Message Login configuration # -#SmsOtpAuthnYunxin SmsOtpAuthnAliyun SmsOtpAuthnTencentCloud # +#aliyun yunxin tencentcloud # ############################################################################ #default -maxkey.otp.sms =${SMS_IMPL:SmsOtpAuthnYunxin} +maxkey.otp.sms.provider =${SMS_PROVIDER:yunxin} #aliyun maxkey.otp.sms.aliyun.accesskeyid =${SMS_ALIYUN_ACCESSKEYID:94395d754eb55693043f5d6a2b772ef4} maxkey.otp.sms.aliyun.accesssecret =${SMS_ALIYUN_ACCESSSECRET:05d5485357bc} @@ -199,11 +199,11 @@ maxkey.otp.sms.tencentcloud.sign =${SMS_TENCENTCLOUD_SIGN:1486009 ############################################################################ #Time-based One-Time Password configuration # ############################################################################ -maxkey.otp.keyuri.format.type =totp -maxkey.otp.keyuri.format.digits =6 -maxkey.otp.keyuri.format.issuer =${OTP_KEYURI_ISSUER:MaxKey} -maxkey.otp.keyuri.format.domain =${maxkey.server.domain} -maxkey.otp.keyuri.format.period =30 +maxkey.otp.policy.type =totp +maxkey.otp.policy.digits =6 +maxkey.otp.policy.issuer =${OTP_POLICY_ISSUER:MaxKey} +maxkey.otp.policy.domain =${maxkey.server.domain} +maxkey.otp.policy.period =30 ############################################################################ #LDAP Login support configuration # diff --git a/maxkey-webs/maxkey-web-maxkey/src/main/resources/application-https.properties b/maxkey-webs/maxkey-web-maxkey/src/main/resources/application-https.properties index e340c326..bf48e0dd 100644 --- a/maxkey-webs/maxkey-web-maxkey/src/main/resources/application-https.properties +++ b/maxkey-webs/maxkey-web-maxkey/src/main/resources/application-https.properties @@ -178,10 +178,10 @@ spring.kafka.producer.value-serializer =org.apache.kafka.common.seriali ############################################################################ #SMS Message Login configuration # -#SmsOtpAuthnYunxin SmsOtpAuthnAliyun SmsOtpAuthnTencentCloud # +#aliyun yunxin tencentcloud # ############################################################################ #default -maxkey.otp.sms =${SMS_IMPL:SmsOtpAuthnYunxin} +maxkey.otp.sms.provider =${SMS_PROVIDER:yunxin} #aliyun maxkey.otp.sms.aliyun.accesskeyid =${SMS_ALIYUN_ACCESSKEYID:94395d754eb55693043f5d6a2b772ef4} maxkey.otp.sms.aliyun.accesssecret =${SMS_ALIYUN_ACCESSSECRET:05d5485357bc} @@ -201,11 +201,11 @@ maxkey.otp.sms.tencentcloud.sign =${SMS_TENCENTCLOUD_SIGN:1486009 ############################################################################ #Time-based One-Time Password configuration # ############################################################################ -maxkey.otp.keyuri.format.type =totp -maxkey.otp.keyuri.format.digits =6 -maxkey.otp.keyuri.format.issuer =${OTP_KEYURI_ISSUER:MaxKey} -maxkey.otp.keyuri.format.domain =${maxkey.server.domain} -maxkey.otp.keyuri.format.period =30 +maxkey.otp.policy.type =totp +maxkey.otp.policy.digits =6 +maxkey.otp.policy.issuer =${OTP_POLICY_ISSUER:MaxKey} +maxkey.otp.policy.domain =${maxkey.server.domain} +maxkey.otp.policy.period =30 ############################################################################ #LDAP Login support configuration # diff --git a/maxkey-webs/maxkey-web-maxkey/src/main/resources/log4j2.xml b/maxkey-webs/maxkey-web-maxkey/src/main/resources/log4j2.xml index 918bf449..2664a842 100644 --- a/maxkey-webs/maxkey-web-maxkey/src/main/resources/log4j2.xml +++ b/maxkey-webs/maxkey-web-maxkey/src/main/resources/log4j2.xml @@ -24,6 +24,8 @@ + + diff --git a/maxkey-webs/maxkey-web-mgt/src/main/resources/application-http.properties b/maxkey-webs/maxkey-web-mgt/src/main/resources/application-http.properties index 30e19849..625194ed 100644 --- a/maxkey-webs/maxkey-web-mgt/src/main/resources/application-http.properties +++ b/maxkey-webs/maxkey-web-mgt/src/main/resources/application-http.properties @@ -157,6 +157,14 @@ spring.kafka.producer.key-serializer =org.apache.kafka.common.seriali spring.kafka.producer.value-serializer =org.apache.kafka.common.serialization.StringSerializer # partitioner #spring.kafka.producer.properties.partitioner.class=com.felix.kafka.producer.CustomizePartitioner +############################################################################ +#Time-based One-Time Password configuration # +############################################################################ +maxkey.otp.policy.type =totp +maxkey.otp.policy.digits =6 +maxkey.otp.policy.issuer =${OTP_POLICY_ISSUER:MaxKey} +maxkey.otp.policy.domain =${maxkey.server.domain} +maxkey.otp.policy.period =30 ############################################################################# #SAML V2.0 configuration # diff --git a/maxkey-webs/maxkey-web-mgt/src/main/resources/log4j2.xml b/maxkey-webs/maxkey-web-mgt/src/main/resources/log4j2.xml index e6843e23..af7cad3c 100644 --- a/maxkey-webs/maxkey-web-mgt/src/main/resources/log4j2.xml +++ b/maxkey-webs/maxkey-web-mgt/src/main/resources/log4j2.xml @@ -25,6 +25,7 @@ +