diff --git a/core/core-frontend/src/assets/svg/icon_file_pem_colorfull.svg b/core/core-frontend/src/assets/svg/icon_file_pem_colorfull.svg
new file mode 100644
index 0000000000..2cdd8f50bb
--- /dev/null
+++ b/core/core-frontend/src/assets/svg/icon_file_pem_colorfull.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/core/core-frontend/src/locales/en.ts b/core/core-frontend/src/locales/en.ts
index dc71cffbba..5bdd7aa906 100644
--- a/core/core-frontend/src/locales/en.ts
+++ b/core/core-frontend/src/locales/en.ts
@@ -620,6 +620,8 @@ export default {
field_mapping: 'Field Mapping',
oauth2name:
'For example: {\'{\'}"account": "oauth2Account", "name": "oauth2Name", "email": "email"{\'}\'}',
+ saml2name:
+ 'For example: {\'{\'}"account": "saml2Account", "name": "saml2Name", "email": "email"{\'}\'}',
oidc_settings: 'OIDC Settings',
test_mail_recipient: 'Only used as a test email recipient',
to_enable_ssl: 'If the SMTP port is 465, you usually need to enable SSL',
diff --git a/core/core-frontend/src/locales/tw.ts b/core/core-frontend/src/locales/tw.ts
index af300906df..47465d8282 100644
--- a/core/core-frontend/src/locales/tw.ts
+++ b/core/core-frontend/src/locales/tw.ts
@@ -600,6 +600,8 @@ export default {
field_mapping: '字段映射',
oauth2name:
'例如:{\'{\'}"account": "oauth2Account", "name": "oauth2Name", "email": "email"{\'}\'}',
+ saml2name:
+ '例如:{\'{\'}"account": "saml2Account", "name": "saml2Name", "email": "email"{\'}\'}',
oidc_settings: 'OIDC設定',
test_mail_recipient: '僅用來作為測試郵件收件者',
to_enable_ssl: '如果SMTP連接埠是465 ,通常需要啟用SSL',
diff --git a/core/core-frontend/src/locales/zh-CN.ts b/core/core-frontend/src/locales/zh-CN.ts
index 46199bc13b..62e3180752 100644
--- a/core/core-frontend/src/locales/zh-CN.ts
+++ b/core/core-frontend/src/locales/zh-CN.ts
@@ -603,6 +603,8 @@ export default {
field_mapping: '字段映射',
oauth2name:
'例如:{\'{\'}"account": "oauth2Account", "name": "oauth2Name", "email": "email"{\'}\'}',
+ saml2name:
+ '例如:{\'{\'}"account": "saml2Account", "name": "saml2Name", "email": "email"{\'}\'}',
oidc_settings: 'OIDC设置',
test_mail_recipient: '仅用来作为测试邮件收件人',
to_enable_ssl: '如果SMTP端口是 465 ,通常需要启用SSL',
diff --git a/sdk/api/api-base/src/main/java/io/dataease/api/xpack/settings/XpackAuthenticationApi.java b/sdk/api/api-base/src/main/java/io/dataease/api/xpack/settings/XpackAuthenticationApi.java
index c859a1f684..a92c4d9b19 100644
--- a/sdk/api/api-base/src/main/java/io/dataease/api/xpack/settings/XpackAuthenticationApi.java
+++ b/sdk/api/api-base/src/main/java/io/dataease/api/xpack/settings/XpackAuthenticationApi.java
@@ -81,6 +81,10 @@ public interface XpackAuthenticationApi {
@PostMapping("/validate/oauth2")
String validateOauth2(@RequestBody XpackOauth2VO editor);
+ @Operation(summary = "验证SAML2")
+ @PostMapping("/validate/saml2")
+ String validateSaml2(@RequestBody XpackSaml2VO editor);
+
@Operation(summary = "验证")
@PostMapping("/validateId/{id}")
String validate(@PathVariable("id") Long id);
diff --git a/sdk/api/api-base/src/main/java/io/dataease/api/xpack/settings/XpackSaml2Api.java b/sdk/api/api-base/src/main/java/io/dataease/api/xpack/settings/XpackSaml2Api.java
index df422d593d..1ee34a1b16 100644
--- a/sdk/api/api-base/src/main/java/io/dataease/api/xpack/settings/XpackSaml2Api.java
+++ b/sdk/api/api-base/src/main/java/io/dataease/api/xpack/settings/XpackSaml2Api.java
@@ -2,6 +2,7 @@ package io.dataease.api.xpack.settings;
import com.github.xiaoymin.knife4j.annotations.ApiSupport;
import io.swagger.v3.oas.annotations.tags.Tag;
+import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
@@ -9,9 +10,12 @@ import org.springframework.web.bind.annotation.PostMapping;
@ApiSupport(order = 899)
public interface XpackSaml2Api {
- @GetMapping("/login")
- void saml2Login();
-
@PostMapping("/sso")
- void saml2Callback() throws Exception;
+ String sso();
+
+ @GetMapping(value = "/metadata", produces = MediaType.APPLICATION_XML_VALUE)
+ String metadata();
+
+ @GetMapping("/login")
+ void login();
}
diff --git a/sdk/api/api-base/src/main/java/io/dataease/api/xpack/settings/vo/XpackSaml2VO.java b/sdk/api/api-base/src/main/java/io/dataease/api/xpack/settings/vo/XpackSaml2VO.java
index ae20026c3f..e06fa1718c 100644
--- a/sdk/api/api-base/src/main/java/io/dataease/api/xpack/settings/vo/XpackSaml2VO.java
+++ b/sdk/api/api-base/src/main/java/io/dataease/api/xpack/settings/vo/XpackSaml2VO.java
@@ -2,14 +2,16 @@ package io.dataease.api.xpack.settings.vo;
import com.fasterxml.jackson.annotation.JsonIgnore;
import lombok.Data;
+import org.opensaml.security.x509.BasicX509Credential;
+import org.opensaml.xmlsec.signature.X509Certificate;
import java.io.Serializable;
import java.security.PrivateKey;
-import java.security.cert.X509Certificate;
@Data
public class XpackSaml2VO implements Serializable {
+ private String idpMetaUrl;
private String spEntityId;
private String spAcs;
@@ -17,15 +19,20 @@ public class XpackSaml2VO implements Serializable {
private String idpEntityId;
private String idpLogoutUrl;
+ private String privateKey;
+ private String certificate;
+
+ private String mapping;
+
@JsonIgnore
private PrivateKey spPrivateKey;
@JsonIgnore
- private X509Certificate spCertificate;
+ private BasicX509Credential spCertificate;
@JsonIgnore
private X509Certificate idpCertificate;
- private int assertionValidityTime = 300; // 5分钟
+ private int assertionValidityTime = 300;
private boolean wantAssertionsSigned = true;
private boolean wantAuthnRequestsSigned = true;
diff --git a/sdk/common/pom.xml b/sdk/common/pom.xml
index 92d6c9f8dd..72b03a9282 100644
--- a/sdk/common/pom.xml
+++ b/sdk/common/pom.xml
@@ -11,7 +11,9 @@
common
-
+
+ 3.4.6
+
@@ -136,6 +138,18 @@
${project.version}
+
+ org.opensaml
+ opensaml-core
+ ${opensaml.version}
+
+
+
+
+ org.opensaml
+ opensaml-saml-impl
+ ${opensaml.version}
+
diff --git a/sdk/common/src/main/java/io/dataease/result/ResultResponseBodyAdvice.java b/sdk/common/src/main/java/io/dataease/result/ResultResponseBodyAdvice.java
index ef2dc5a03c..da9aa40737 100644
--- a/sdk/common/src/main/java/io/dataease/result/ResultResponseBodyAdvice.java
+++ b/sdk/common/src/main/java/io/dataease/result/ResultResponseBodyAdvice.java
@@ -3,6 +3,7 @@ package io.dataease.result;
import io.dataease.i18n.I18n;
import io.dataease.i18n.Translator;
import io.dataease.utils.JsonUtil;
+import org.apache.commons.lang3.ObjectUtils;
import org.springframework.core.MethodParameter;
import org.springframework.http.MediaType;
import org.springframework.http.converter.HttpMessageConverter;
@@ -32,6 +33,10 @@ public class ResultResponseBodyAdvice implements ResponseBodyAdvice