diff --git a/maku-boot-system/src/main/java/net/maku/system/controller/SysThirdLoginConfigController.java b/maku-boot-system/src/main/java/net/maku/system/controller/SysThirdLoginConfigController.java
new file mode 100644
index 0000000..83d13b0
--- /dev/null
+++ b/maku-boot-system/src/main/java/net/maku/system/controller/SysThirdLoginConfigController.java
@@ -0,0 +1,77 @@
+package net.maku.system.controller;
+
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import jakarta.validation.Valid;
+import lombok.AllArgsConstructor;
+import net.maku.framework.common.query.Query;
+import net.maku.framework.common.utils.PageResult;
+import net.maku.framework.common.utils.Result;
+import net.maku.system.convert.SysThirdLoginConfigConvert;
+import net.maku.system.entity.SysThirdLoginConfigEntity;
+import net.maku.system.service.SysThirdLoginConfigService;
+import net.maku.system.vo.SysThirdLoginConfigVO;
+import org.springdoc.core.annotations.ParameterObject;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * 第三方登录配置
+ *
+ * @author 阿沐 babamu@126.com
+ * MAKU
+ */
+@RestController
+@RequestMapping("sys/third/config")
+@Tag(name = "第三方登录配置")
+@AllArgsConstructor
+public class SysThirdLoginConfigController {
+ private final SysThirdLoginConfigService sysThirdLoginConfigService;
+
+ @GetMapping("page")
+ @Operation(summary = "分页")
+ @PreAuthorize("hasAuthority('third:config:all')")
+ public Result> page(@ParameterObject @Valid Query query) {
+ PageResult page = sysThirdLoginConfigService.page(query);
+
+ return Result.ok(page);
+ }
+
+ @GetMapping("{id}")
+ @Operation(summary = "信息")
+ @PreAuthorize("hasAuthority('third:config:all')")
+ public Result get(@PathVariable("id") Long id) {
+ SysThirdLoginConfigEntity entity = sysThirdLoginConfigService.getById(id);
+
+ return Result.ok(SysThirdLoginConfigConvert.INSTANCE.convert(entity));
+ }
+
+ @PostMapping
+ @Operation(summary = "保存")
+ @PreAuthorize("hasAuthority('third:config:all')")
+ public Result save(@RequestBody SysThirdLoginConfigVO vo) {
+ sysThirdLoginConfigService.save(vo);
+
+ return Result.ok();
+ }
+
+ @PutMapping
+ @Operation(summary = "修改")
+ @PreAuthorize("hasAuthority('third:config:all')")
+ public Result update(@RequestBody @Valid SysThirdLoginConfigVO vo) {
+ sysThirdLoginConfigService.update(vo);
+
+ return Result.ok();
+ }
+
+ @DeleteMapping
+ @Operation(summary = "删除")
+ @PreAuthorize("hasAuthority('third:config:all')")
+ public Result delete(@RequestBody List idList) {
+ sysThirdLoginConfigService.delete(idList);
+
+ return Result.ok();
+ }
+}
\ No newline at end of file
diff --git a/maku-boot-system/src/main/java/net/maku/system/convert/SysThirdLoginConfigConvert.java b/maku-boot-system/src/main/java/net/maku/system/convert/SysThirdLoginConfigConvert.java
new file mode 100644
index 0000000..ef93720
--- /dev/null
+++ b/maku-boot-system/src/main/java/net/maku/system/convert/SysThirdLoginConfigConvert.java
@@ -0,0 +1,26 @@
+package net.maku.system.convert;
+
+import net.maku.system.entity.SysThirdLoginConfigEntity;
+import net.maku.system.vo.SysThirdLoginConfigVO;
+import org.mapstruct.Mapper;
+import org.mapstruct.factory.Mappers;
+
+import java.util.List;
+
+/**
+ * 第三方登录配置
+ *
+ * @author 阿沐 babamu@126.com
+ * MAKU
+ */
+@Mapper
+public interface SysThirdLoginConfigConvert {
+ SysThirdLoginConfigConvert INSTANCE = Mappers.getMapper(SysThirdLoginConfigConvert.class);
+
+ SysThirdLoginConfigEntity convert(SysThirdLoginConfigVO vo);
+
+ SysThirdLoginConfigVO convert(SysThirdLoginConfigEntity entity);
+
+ List convertList(List list);
+
+}
\ No newline at end of file
diff --git a/maku-boot-system/src/main/java/net/maku/system/dao/SysThirdLoginConfigDao.java b/maku-boot-system/src/main/java/net/maku/system/dao/SysThirdLoginConfigDao.java
new file mode 100644
index 0000000..d8b380c
--- /dev/null
+++ b/maku-boot-system/src/main/java/net/maku/system/dao/SysThirdLoginConfigDao.java
@@ -0,0 +1,16 @@
+package net.maku.system.dao;
+
+import net.maku.framework.mybatis.dao.BaseDao;
+import net.maku.system.entity.SysThirdLoginConfigEntity;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 第三方登录配置
+ *
+ * @author 阿沐 babamu@126.com
+ * MAKU
+ */
+@Mapper
+public interface SysThirdLoginConfigDao extends BaseDao {
+
+}
\ No newline at end of file
diff --git a/maku-boot-system/src/main/java/net/maku/system/entity/SysThirdLoginConfigEntity.java b/maku-boot-system/src/main/java/net/maku/system/entity/SysThirdLoginConfigEntity.java
new file mode 100644
index 0000000..c4325ef
--- /dev/null
+++ b/maku-boot-system/src/main/java/net/maku/system/entity/SysThirdLoginConfigEntity.java
@@ -0,0 +1,73 @@
+package net.maku.system.entity;
+
+import com.baomidou.mybatisplus.annotation.*;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * 第三方登录配置
+ *
+ * @author 阿沐 babamu@126.com
+ * MAKU
+ */
+@Data
+@TableName("sys_third_login_config")
+public class SysThirdLoginConfigEntity {
+ /**
+ * id
+ */
+ @TableId
+ private Long id;
+
+ /**
+ * 开放平台类型
+ */
+ private String openType;
+
+ /**
+ * ClientID
+ */
+ private String clientId;
+
+ /**
+ * ClientSecret
+ */
+ private String clientSecret;
+
+ /**
+ * RedirectUri
+ */
+ private String redirectUri;
+
+ /**
+ * AgentID
+ */
+ private String agentId;
+
+ /**
+ * 租户ID
+ */
+ private Long tenantId;
+
+ /**
+ * 版本号
+ */
+ @Version
+ @TableField(fill = FieldFill.INSERT)
+ private Integer version;
+
+ /**
+ * 删除标记
+ */
+ @TableLogic
+ @TableField(fill = FieldFill.INSERT)
+ private Integer deleted;
+
+ /**
+ * 创建时间
+ */
+ @TableField(fill = FieldFill.INSERT)
+ private Date createTime;
+
+}
\ No newline at end of file
diff --git a/maku-boot-system/src/main/java/net/maku/system/service/SysThirdLoginConfigService.java b/maku-boot-system/src/main/java/net/maku/system/service/SysThirdLoginConfigService.java
new file mode 100644
index 0000000..31ea584
--- /dev/null
+++ b/maku-boot-system/src/main/java/net/maku/system/service/SysThirdLoginConfigService.java
@@ -0,0 +1,34 @@
+package net.maku.system.service;
+
+import me.zhyd.oauth.request.AuthRequest;
+import net.maku.framework.common.query.Query;
+import net.maku.framework.common.utils.PageResult;
+import net.maku.framework.mybatis.service.BaseService;
+import net.maku.system.entity.SysThirdLoginConfigEntity;
+import net.maku.system.vo.SysThirdLoginConfigVO;
+
+import java.util.List;
+
+/**
+ * 第三方登录配置
+ *
+ * @author 阿沐 babamu@126.com
+ * MAKU
+ */
+public interface SysThirdLoginConfigService extends BaseService {
+
+ PageResult page(Query query);
+
+ void save(SysThirdLoginConfigVO vo);
+
+ void update(SysThirdLoginConfigVO vo);
+
+ void delete(List idList);
+
+ /**
+ * 根据类型,获取授权请求
+ *
+ * @param openType 第三方登录类型
+ */
+ AuthRequest getAuthRequest(String openType);
+}
\ No newline at end of file
diff --git a/maku-boot-system/src/main/java/net/maku/system/service/impl/SysThirdLoginConfigServiceImpl.java b/maku-boot-system/src/main/java/net/maku/system/service/impl/SysThirdLoginConfigServiceImpl.java
new file mode 100644
index 0000000..de9747d
--- /dev/null
+++ b/maku-boot-system/src/main/java/net/maku/system/service/impl/SysThirdLoginConfigServiceImpl.java
@@ -0,0 +1,97 @@
+package net.maku.system.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import lombok.AllArgsConstructor;
+import me.zhyd.oauth.config.AuthConfig;
+import me.zhyd.oauth.request.*;
+import net.maku.framework.common.exception.ServerException;
+import net.maku.framework.common.query.Query;
+import net.maku.framework.common.utils.PageResult;
+import net.maku.framework.mybatis.service.impl.BaseServiceImpl;
+import net.maku.system.convert.SysThirdLoginConfigConvert;
+import net.maku.system.dao.SysThirdLoginConfigDao;
+import net.maku.system.entity.SysThirdLoginConfigEntity;
+import net.maku.system.enums.ThirdLoginEnum;
+import net.maku.system.service.SysThirdLoginConfigService;
+import net.maku.system.vo.SysThirdLoginConfigVO;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.List;
+
+/**
+ * 第三方登录配置
+ *
+ * @author 阿沐 babamu@126.com
+ * MAKU
+ */
+@Service
+@AllArgsConstructor
+public class SysThirdLoginConfigServiceImpl extends BaseServiceImpl implements SysThirdLoginConfigService {
+
+ @Override
+ public PageResult page(Query query) {
+ IPage page = baseMapper.selectPage(getPage(query), Wrappers.lambdaQuery());
+
+ return new PageResult<>(SysThirdLoginConfigConvert.INSTANCE.convertList(page.getRecords()), page.getTotal());
+ }
+
+ @Override
+ public void save(SysThirdLoginConfigVO vo) {
+ SysThirdLoginConfigEntity entity = SysThirdLoginConfigConvert.INSTANCE.convert(vo);
+
+ baseMapper.insert(entity);
+ }
+
+ @Override
+ public void update(SysThirdLoginConfigVO vo) {
+ SysThirdLoginConfigEntity entity = SysThirdLoginConfigConvert.INSTANCE.convert(vo);
+
+ updateById(entity);
+ }
+
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public void delete(List idList) {
+ removeByIds(idList);
+ }
+
+ @Override
+ public AuthRequest getAuthRequest(String openType) {
+ SysThirdLoginConfigEntity config = baseMapper.selectOne(new LambdaQueryWrapper()
+ .eq(SysThirdLoginConfigEntity::getOpenType, openType));
+
+ if (config == null) {
+ throw new ServerException("未找到第三方登录配置");
+ }
+
+ AuthRequest authRequest = switch (ThirdLoginEnum.toEnum(openType)) {
+ case WECHAT_WORK -> new AuthWeChatEnterpriseQrcodeRequest(AuthConfig.builder()
+ .clientId(config.getClientId())
+ .clientSecret(config.getClientSecret())
+ .redirectUri(config.getRedirectUri())
+ .agentId(config.getAgentId())
+ .build());
+ case DING_TALK -> new AuthDingTalkRequest(AuthConfig.builder()
+ .clientId(config.getClientId())
+ .clientSecret(config.getClientSecret())
+ .redirectUri(config.getRedirectUri())
+ .build());
+ case FEI_SHU -> new AuthFeishuRequest(AuthConfig.builder()
+ .clientId(config.getClientId())
+ .clientSecret(config.getClientSecret())
+ .redirectUri(config.getRedirectUri())
+ .build());
+ case WECHAT_OPEN -> new AuthWeChatOpenRequest(AuthConfig.builder()
+ .clientId(config.getClientId())
+ .clientSecret(config.getClientSecret())
+ .redirectUri(config.getRedirectUri())
+ .build());
+ };
+
+ return authRequest;
+ }
+
+}
\ No newline at end of file
diff --git a/maku-boot-system/src/main/java/net/maku/system/vo/SysThirdLoginConfigVO.java b/maku-boot-system/src/main/java/net/maku/system/vo/SysThirdLoginConfigVO.java
new file mode 100644
index 0000000..ee498ad
--- /dev/null
+++ b/maku-boot-system/src/main/java/net/maku/system/vo/SysThirdLoginConfigVO.java
@@ -0,0 +1,45 @@
+package net.maku.system.vo;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import net.maku.framework.common.utils.DateUtils;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * 第三方登录配置
+ *
+ * @author 阿沐 babamu@126.com
+ * MAKU
+ */
+@Data
+@Schema(description = "第三方登录配置")
+public class SysThirdLoginConfigVO implements Serializable {
+ private static final long serialVersionUID = 1L;
+
+ @Schema(description = "id")
+ private Long id;
+
+ @Schema(description = "开放平台类型")
+ private String openType;
+
+ @Schema(description = "ClientID")
+ private String clientId;
+
+ @Schema(description = "ClientSecret")
+ private String clientSecret;
+
+ @Schema(description = "RedirectUri")
+ private String redirectUri;
+
+ @Schema(description = "AgentID")
+ private String agentId;
+
+ @Schema(description = "创建时间")
+ @JsonFormat(pattern = DateUtils.DATE_TIME_PATTERN)
+ private Date createTime;
+
+
+}
\ No newline at end of file