diff --git a/ReleaseNotes.txt b/ReleaseNotes.txt index 018cdda3..3021dd26 100644 --- a/ReleaseNotes.txt +++ b/ReleaseNotes.txt @@ -5,12 +5,12 @@ *(MAXKEY-200604) 修复用户组访问权限删除问题 *(MAXKEY-200605) Javascript验证及AJAX提交优化 *(MAXKEY-200606) DAO层整合 - *(MAXKEY-200607) 社交账号关联调整 + *(MAXKEY-200607) 社交账号关联调整及优化 *(MAXKEY-200608) 数据库表字段的注释修复 *(MAXKEY-200609) 官方网站优化 *(MAXKEY-200610) properties优化 *(MAXKEY-200611) 访问控制修复,访问重定向的问题修复 - *(MAXKEY-200607) 依赖jar升级,消除非必要依赖 + *(MAXKEY-200612) 依赖jar升级,消除非必要依赖 spring 5.2.6.RELEASE springBoot 2.3.0.RELEASE springSecurity 5.3.2.RELEASE diff --git a/docs/authn/social.md b/docs/authn/social.md index 125993c3..9ac881f3 100644 --- a/docs/authn/social.md +++ b/docs/authn/social.md @@ -19,7 +19,7 @@
#enable social sign on
@@ -40,25 +40,13 @@ config.socialsignon.sinaweibo.account.id=id
config.socialsignon.sinaweibo.sortorder=1
-配置maxkey/spring/maxkey.xml
+配置maxkey/maxkey.properties
-
-<bean id="socialSignOnWeibo" class="org.maxkey.authn.support.socialsignon.service.SocialSignOnProvider">
- <property name="provider" value="${config.socialsignon.sinaweibo.provider}"/>
- <property name="providerName" value="${config.socialsignon.sinaweibo.provider.name}"/>
- <property name="icon" value="${config.socialsignon.sinaweibo.icon}"/>
- <property name="clientId" value="${config.socialsignon.sinaweibo.client.id}"/>
- <property name="clientSecret" value="${config.socialsignon.sinaweibo.client.secret}"/>
- <property name="sortOrder" value="${config.socialsignon.sinaweibo.sortorder}"/>
-</bean>
-
-<bean id="socialSignOnProviderService" class="org.maxkey.authn.support.socialsignon.service.SocialSignOnProviderService">
- <property name="socialSignOnProviders" >
- <list>
- <ref bean="socialSignOnWeibo" />
- </list>
- </property>
-</bean>
+
+#enable social sign on
+config.login.socialsignon=true
+#social sign on providers
+config.login.socialsignon.providers=sinaweibo,google,qq,dingtalk,microsoft,facebook
账号绑定
diff --git a/maxkey-core/src/main/java/org/maxkey/persistence/db/PasswordPolicyRowMapper.java b/maxkey-core/src/main/java/org/maxkey/persistence/db/PasswordPolicyRowMapper.java
index 1b7aca7e..043986b8 100644
--- a/maxkey-core/src/main/java/org/maxkey/persistence/db/PasswordPolicyRowMapper.java
+++ b/maxkey-core/src/main/java/org/maxkey/persistence/db/PasswordPolicyRowMapper.java
@@ -2,7 +2,6 @@ package org.maxkey.persistence.db;
import java.sql.ResultSet;
import java.sql.SQLException;
-
import org.maxkey.domain.PasswordPolicy;
import org.springframework.jdbc.core.RowMapper;
diff --git a/maxkey-core/src/main/java/org/maxkey/persistence/db/UserInfoRowMapper.java b/maxkey-core/src/main/java/org/maxkey/persistence/db/UserInfoRowMapper.java
index fa82d7ac..486d9d4f 100644
--- a/maxkey-core/src/main/java/org/maxkey/persistence/db/UserInfoRowMapper.java
+++ b/maxkey-core/src/main/java/org/maxkey/persistence/db/UserInfoRowMapper.java
@@ -2,7 +2,6 @@ package org.maxkey.persistence.db;
import java.sql.ResultSet;
import java.sql.SQLException;
-
import org.maxkey.domain.UserInfo;
import org.springframework.jdbc.core.RowMapper;
diff --git a/maxkey-web-maxkey/src/main/java/org/maxkey/MaxKeyConfig.java b/maxkey-web-maxkey/src/main/java/org/maxkey/MaxKeyConfig.java
index a287de48..cfa7fcda 100644
--- a/maxkey-web-maxkey/src/main/java/org/maxkey/MaxKeyConfig.java
+++ b/maxkey-web-maxkey/src/main/java/org/maxkey/MaxKeyConfig.java
@@ -1,10 +1,7 @@
package org.maxkey;
-import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
-import java.util.Properties;
-
import org.apache.catalina.Context;
import org.apache.catalina.connector.Connector;
import org.apache.tomcat.util.descriptor.web.SecurityCollection;
@@ -17,9 +14,6 @@ import org.maxkey.authn.realm.activedirectory.ActiveDirectoryAuthenticationRealm
import org.maxkey.authn.realm.activedirectory.ActiveDirectoryServer;
import org.maxkey.authn.support.kerberos.KerberosProxy;
import org.maxkey.authn.support.kerberos.RemoteKerberosService;
-import org.maxkey.authn.support.socialsignon.service.JdbcSocialsAssociateService;
-import org.maxkey.authn.support.socialsignon.service.SocialSignOnProvider;
-import org.maxkey.authn.support.socialsignon.service.SocialSignOnProviderService;
import org.maxkey.authz.oauth2.provider.endpoint.TokenEndpointAuthenticationFilter;
import org.maxkey.constants.ConstantsProperties;
import org.maxkey.crypto.password.opt.algorithm.KeyUriFormat;
@@ -34,16 +28,12 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.annotation.Value;
-import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
-import org.springframework.context.annotation.ImportResource;
import org.springframework.context.annotation.PropertySource;
-import org.springframework.core.io.ClassPathResource;
-import org.springframework.core.io.Resource;
import org.springframework.jdbc.core.JdbcTemplate;
@@ -69,8 +59,7 @@ import org.springframework.jdbc.core.JdbcTemplate;
"org.maxkey.authz.exapi.endpoint",
"org.maxkey.authz.formbased.endpoint",
"org.maxkey.authz.ltpa.endpoint",
- "org.maxkey.authz.token.endpoint",
- "org.maxkey.web.authentication.support.socialsignon"
+ "org.maxkey.authz.token.endpoint"
})
public class MaxKeyConfig implements InitializingBean {
private static final Logger _logger = LoggerFactory.getLogger(MaxKeyConfig.class);
@@ -239,45 +228,7 @@ public class MaxKeyConfig implements InitializingBean {
return kerberosService;
}
- @Bean(name = "socialSignOnProviderService")
- @ConditionalOnClass(SocialSignOnProvider.class)
- public SocialSignOnProviderService socialSignOnProviderService() throws IOException {
- SocialSignOnProviderService socialSignOnProviderService = new SocialSignOnProviderService();
-
- Resource resource = new ClassPathResource(
- ConstantsProperties.classPathResource(ConstantsProperties.classPathResource(ConstantsProperties.maxKeyPropertySource)));
- Properties properties = new Properties();
- properties.load(resource.getInputStream());
- String [] providerList =properties.get("config.login.socialsignon.providers").toString().split(",");
- List socialSignOnProviderList = new ArrayList();
- for(String provider : providerList) {
- String providerName = properties.getProperty("config.socialsignon."+provider+".provider.name");
- String icon=properties.getProperty("config.socialsignon."+provider+".icon");
- String clientId=properties.getProperty("config.socialsignon."+provider+".client.id");
- String clientSecret=properties.getProperty("config.socialsignon."+provider+".client.secret");
- String sortOrder = properties.getProperty("config.socialsignon."+provider+".sortorder");
- SocialSignOnProvider socialSignOnProvider = new SocialSignOnProvider();
- socialSignOnProvider.setProvider(provider);
- socialSignOnProvider.setProviderName(providerName);
- socialSignOnProvider.setIcon(icon);
- socialSignOnProvider.setClientId(clientId);
- socialSignOnProvider.setClientSecret(clientSecret);
- socialSignOnProvider.setSortOrder(Integer.valueOf(sortOrder));
- _logger.debug("socialSignOnProvider " + socialSignOnProvider);
- socialSignOnProviderList.add(socialSignOnProvider);
- }
- socialSignOnProviderService.setSocialSignOnProviders(socialSignOnProviderList);
- _logger.debug("SocialSignOnProviderService inited.");
- return socialSignOnProviderService;
- }
-
- @Bean(name = "socialsAssociateService")
- public JdbcSocialsAssociateService socialsAssociateService(
- JdbcTemplate jdbcTemplate) {
- JdbcSocialsAssociateService socialsAssociateService = new JdbcSocialsAssociateService(jdbcTemplate);
- _logger.debug("JdbcSocialsAssociateService inited.");
- return socialsAssociateService;
- }
+
@Override
public void afterPropertiesSet() throws Exception {
diff --git a/maxkey-web-maxkey/src/main/java/org/maxkey/autoconfigure/SocialSignOnAutoConfiguration.java b/maxkey-web-maxkey/src/main/java/org/maxkey/autoconfigure/SocialSignOnAutoConfiguration.java
new file mode 100644
index 00000000..21119659
--- /dev/null
+++ b/maxkey-web-maxkey/src/main/java/org/maxkey/autoconfigure/SocialSignOnAutoConfiguration.java
@@ -0,0 +1,78 @@
+package org.maxkey.autoconfigure;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Properties;
+
+import org.maxkey.authn.support.socialsignon.service.JdbcSocialsAssociateService;
+import org.maxkey.authn.support.socialsignon.service.SocialSignOnProvider;
+import org.maxkey.authn.support.socialsignon.service.SocialSignOnProviderService;
+import org.maxkey.constants.ConstantsProperties;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.InitializingBean;
+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.annotation.PropertySource;
+import org.springframework.core.io.ClassPathResource;
+import org.springframework.core.io.Resource;
+import org.springframework.jdbc.core.JdbcTemplate;
+
+@Configuration
+@ComponentScan(basePackages = {
+ "org.maxkey.authn.support.socialsignon"
+})
+@PropertySource(ConstantsProperties.maxKeyPropertySource)
+public class SocialSignOnAutoConfiguration implements InitializingBean {
+ private static final Logger _logger = LoggerFactory.getLogger(SocialSignOnAutoConfiguration.class);
+
+ @Bean(name = "socialSignOnProviderService")
+ @ConditionalOnClass(SocialSignOnProvider.class)
+ public SocialSignOnProviderService socialSignOnProviderService() throws IOException {
+ SocialSignOnProviderService socialSignOnProviderService = new SocialSignOnProviderService();
+
+ Resource resource = new ClassPathResource(
+ ConstantsProperties.classPathResource(ConstantsProperties.classPathResource(ConstantsProperties.maxKeyPropertySource)));
+ Properties properties = new Properties();
+ properties.load(resource.getInputStream());
+ String [] providerList =properties.get("config.login.socialsignon.providers").toString().split(",");
+ List socialSignOnProviderList = new ArrayList();
+ for(String provider : providerList) {
+ String providerName = properties.getProperty("config.socialsignon."+provider+".provider.name");
+ String icon=properties.getProperty("config.socialsignon."+provider+".icon");
+ String clientId=properties.getProperty("config.socialsignon."+provider+".client.id");
+ String clientSecret=properties.getProperty("config.socialsignon."+provider+".client.secret");
+ String sortOrder = properties.getProperty("config.socialsignon."+provider+".sortorder");
+ SocialSignOnProvider socialSignOnProvider = new SocialSignOnProvider();
+ socialSignOnProvider.setProvider(provider);
+ socialSignOnProvider.setProviderName(providerName);
+ socialSignOnProvider.setIcon(icon);
+ socialSignOnProvider.setClientId(clientId);
+ socialSignOnProvider.setClientSecret(clientSecret);
+ socialSignOnProvider.setSortOrder(Integer.valueOf(sortOrder));
+ _logger.debug("socialSignOnProvider " + socialSignOnProvider);
+ socialSignOnProviderList.add(socialSignOnProvider);
+ }
+ socialSignOnProviderService.setSocialSignOnProviders(socialSignOnProviderList);
+ _logger.debug("SocialSignOnProviderService inited.");
+ return socialSignOnProviderService;
+ }
+
+ @Bean(name = "socialsAssociateService")
+ public JdbcSocialsAssociateService socialsAssociateService(
+ JdbcTemplate jdbcTemplate) {
+ JdbcSocialsAssociateService socialsAssociateService = new JdbcSocialsAssociateService(jdbcTemplate);
+ _logger.debug("JdbcSocialsAssociateService inited.");
+ return socialsAssociateService;
+ }
+
+
+ @Override
+ public void afterPropertiesSet() throws Exception {
+ // TODO Auto-generated method stub
+
+ }
+}
diff --git a/maxkey-web-maxkey/src/main/resources/META-INF/spring.factories b/maxkey-web-maxkey/src/main/resources/META-INF/spring.factories
index 2889443f..64a35b63 100644
--- a/maxkey-web-maxkey/src/main/resources/META-INF/spring.factories
+++ b/maxkey-web-maxkey/src/main/resources/META-INF/spring.factories
@@ -7,4 +7,5 @@ org.maxkey.autoconfigure.RedisAutoConfiguration,\
org.maxkey.autoconfigure.CasAutoConfiguration,\
org.maxkey.autoconfigure.Oauth20AutoConfiguration,\
org.maxkey.autoconfigure.Saml20AutoConfiguration,\
+org.maxkey.autoconfigure.SocialSignOnAutoConfiguration,\
org.maxkey.MaxKeyMvcConfig
diff --git a/maxkey-web-maxkey/src/main/resources/maxkey.properties b/maxkey-web-maxkey/src/main/resources/maxkey.properties
index 2b5bae37..47b214ae 100644
--- a/maxkey-web-maxkey/src/main/resources/maxkey.properties
+++ b/maxkey-web-maxkey/src/main/resources/maxkey.properties
@@ -58,11 +58,8 @@ config.support.kerberos.default.redirecturi=http://sso.maxkey.org/kerberos/authn
############################################################################
# HTTPHEADER Login configuration
############################################################################
-
config.support.httpheader.enable=false
-
config.support.httpheader.headername=header-user
-
# iv-user is for IBM Security Access Manager
#config.httpheader.headername=iv-user
@@ -94,12 +91,48 @@ config.support.wsfederation.logoutUrl=https://adfs.maxkey.org/adfs/ls/?wa=wsigno
#############################################################################
#############################################################################
+# OIDC V1.0 METADATA configuration
config.oidc.metadata.issuer=${config.server.name}/maxkey
config.oidc.metadata.authorizationEndpoint=${config.server.name}/maxkey/oauth/v20/authorize
config.oidc.metadata.tokenEndpoint=${config.server.name}/maxkey/oauth/v20/token
config.oidc.metadata.userinfoEndpoint=${config.server.name}/maxkey/api/connect/userinfo
-#############################################################################
+#############################################################################
+# SAML V2.0 configuration
+#saml common
+config.saml.v20.max.parser.pool.size=2
+config.saml.v20.assertion.validity.time.ins.seconds=90
+config.saml.v20.replay.cache.life.in.millis=14400000
+config.saml.v20.issue.instant.check.clock.skew.in.seconds=90
+config.saml.v20.issue.instant.check.validity.time.in.seconds=300
+
+
+#saml idp keystore
+config.saml.v20.idp.keystore.password=maxkey
+config.saml.v20.idp.keystore.private.key.password=maxkey
+config.saml.v20.idp.keystore=classpath\:config/samlServerKeystore.jks
+#keystore id for sec
+config.saml.v20.idp.issuing.entity.id=maxkey.org
+config.saml.v20.idp.issuer=https://sso.maxkey.org/maxkey/saml
+
+config.saml.v20.idp.receiver.endpoint=https\://sso.maxkey.org/
+
+#saml sp keystore
+config.saml.v20.sp.keystore.password=maxkey
+config.saml.v20.sp.keystore.private.key.password=maxkey
+config.saml.v20.sp.keystore=classpath\:config/samlClientKeystore.jks
+config.saml.v20.sp.issuing.entity.id=client.maxkey.org
+
+#Saml v20 METADATA
+config.saml.v20.metadata.orgName=maxkey
+config.saml.v20.metadata.orgDisplayName=maxkey
+config.saml.v20.metadata.orgURL=https://github.com/shimingxy/MaxKey
+config.saml.v20.metadata.contactType=technical
+config.saml.v20.metadata.company=maxkey
+config.saml.v20.metadata.givenName=maxkey
+config.saml.v20.metadata.surName=maxkey
+config.saml.v20.metadata.emailAddress=shimingxy@163.com
+config.saml.v20.metadata.telephoneNumber=4008981111
############################################################################
# Social Sign On Configuration #
@@ -160,40 +193,3 @@ config.socialsignon.facebook.client.id=appKey
config.socialsignon.facebook.client.secret=appSecret
config.socialsignon.facebook.account.id=id
config.socialsignon.facebook.sortorder=7
-
-############################################################################
-# SAML V2.0 configuration
-#saml common
-config.saml.v20.max.parser.pool.size=2
-config.saml.v20.assertion.validity.time.ins.seconds=90
-config.saml.v20.replay.cache.life.in.millis=14400000
-config.saml.v20.issue.instant.check.clock.skew.in.seconds=90
-config.saml.v20.issue.instant.check.validity.time.in.seconds=300
-
-
-#saml idp keystore
-config.saml.v20.idp.keystore.password=maxkey
-config.saml.v20.idp.keystore.private.key.password=maxkey
-config.saml.v20.idp.keystore=classpath\:config/samlServerKeystore.jks
-#keystore id for sec
-config.saml.v20.idp.issuing.entity.id=maxkey.org
-config.saml.v20.idp.issuer=https://sso.maxkey.org/maxkey/saml
-
-config.saml.v20.idp.receiver.endpoint=https\://sso.maxkey.org/
-
-#saml sp keystore
-config.saml.v20.sp.keystore.password=maxkey
-config.saml.v20.sp.keystore.private.key.password=maxkey
-config.saml.v20.sp.keystore=classpath\:config/samlClientKeystore.jks
-config.saml.v20.sp.issuing.entity.id=client.maxkey.org
-
-#Saml v20 Metadata
-config.saml.v20.metadata.orgName=maxkey
-config.saml.v20.metadata.orgDisplayName=maxkey
-config.saml.v20.metadata.orgURL=https://github.com/shimingxy/MaxKey
-config.saml.v20.metadata.contactType=technical
-config.saml.v20.metadata.company=maxkey
-config.saml.v20.metadata.givenName=maxkey
-config.saml.v20.metadata.surName=maxkey
-config.saml.v20.metadata.emailAddress=shimingxy@163.com
-config.saml.v20.metadata.telephoneNumber=4008981111
\ No newline at end of file