大型制造业企业统一身份认证平台建设方案
一、项目背景与目标
1.1 现状与痛点
某大型制造业企业在长期信息化建设过程中,先后上线了ERP、MES、PLM、CRM、OA、SCM、HR等十余套业务系统。这些系统由不同厂商在不同时期建设,技术栈涵盖Java、Python、C#/.NET、PHP等多种语言,形成了典型的“系统烟囱”格局:
- 账号体系分散:员工需要在多个系统中维护不同的账号密码,记忆负担重,密码管理混乱
- 认证方式各异:各系统独立实现登录认证,有Form表单登录、Windows集成认证、Token认证等多种方式,缺乏统一标准
- 权限管理割裂:用户权限在各系统中分别配置,员工调岗或离职时难以在多个系统中同步更新权限
- 安全风险突出:部分老旧系统仍使用弱密码策略,缺乏多因素认证和审计能力
- 对接成本高昂:新系统上线需要逐个与现有系统进行接口对接,重复建设严重
1.2 建设目标
本次统一身份认证平台建设需达成以下核心目标:
1.3 技术选型:为什么选择MaxKey
结合目标客户“大型制造业”的特点和需求,推荐采用MaxKey作为统一身份认证平台的核心。
| 协议支持全面性 | ★★★★★(8大协议) | ★★★★ | ★★★★ | ★★★★★ |
| 制造业案例 | ★★★★★(中国航空制造技术研究院等) | ★★★ | ★★ | ★★★ |
| 国内生态与支持 | ★★★★★(中文文档完善) | ★★★ | ★★★★ | ★★ |
| 异构系统集成 | ★★★★(Java生态+标准协议) | ★★★★ | ★★★★(多语言SDK) | ★★★ |
| 身份同步能力 | ★★★★★(SCIM 2.0+Connector) | ★★★★ | ★★★ | ★★ |
| 部署运维复杂度 | ★★★★ | ★★★ | ★★★★★ | ★★★ |
| 多租户支持 | ★★★★★ | ★★★★ | ★★★★ | ★★★ |
MaxKey的核心优势在于:
- 已有多家制造业成功案例:包括中国航空制造技术研究院等标杆客户,说明其在制造业场景中经过了生产验证
- 协议支持最为全面:支持OAuth 2.x/OpenID Connect、SAML 2.0、JWT、CAS、SCIM 2.0等8大标准协议,能够覆盖企业内部各种异构系统的接入需求
- 国内开源IAM第一品牌:中文文档完善,社区响应及时,符合“自主可控”的政策导向
- 开箱即用的身份连接器:预置了与Active Directory、LDAP、JDBC、SCIM 2.0、企业微信、钉钉、飞书等系统的同步器,大幅降低对接存量系统的开发工作量
- 基于Java EE微服务架构:采用Spring、MySQL、Tomcat、Redis、Kafka等成熟技术栈,与企业现有Java技术栈匹配度高,便于二次开发和运维
二、总体架构设计
2.1 逻辑架构
┌─────────────────────────────────────────────────────────────────────────────┐
│ 统一登录门户 (Portal) │
│ SSO登录页 | 应用导航 | 自助服务 | MFA │
└─────────────────────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────────────────────┐
│ MaxKey 统一身份认证平台 │
├─────────────────────────────────────────────────────────────────────────────┤
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ 认证服务 │ │ 令牌服务 │ │ 会话管理 │ │ 审计日志 │ │
│ │ (maxkey-web)│ │ (Token) │ │ (Session) │ │ (Audit) │ │
│ └─────────────┘ └─────────────┘ └─────────────┘ └─────────────┘ │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ 协议适配层 │ │ 用户管理 │ │ 权限管理 │ │ 多租户管理 │ │
│ │ (Protocols) │ │ (IDM) │ │ (RBAC) │ │ (Multi-tenant)│ │
│ └─────────────┘ └─────────────┘ └─────────────┘ └─────────────┘ │
├─────────────────────────────────────────────────────────────────────────────┤
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │ OAuth2.0 │ │ OIDC │ │ SAML 2.0 │ │ CAS │ │ JWT │ │
│ │ 适配器 │ │ 适配器 │ │ 适配器 │ │ 适配器 │ │ 适配器 │ │
│ └──────────┘ └──────────┘ └──────────┘ └──────────┘ └──────────┘ │
└─────────────────────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────────────────────┐
│ 身份同步层 (Synchronizer) │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │LDAP/AD │ │ JDBC │ │ SCIM 2.0 │ │ 企业微信 │ │ 钉钉/飞书 │ │
│ │ Connector│ │ Connector│ │ Connector│ │ Connector│ │ Connector│ │
│ └──────────┘ └──────────┘ └──────────┘ └──────────┘ └──────────┘ │
└─────────────────────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────────────────────┐
│ 企业身份数据源 │
│ HR系统 │ AD域控 │ LDAP │ 企业微信 │ 钉钉 │ 飞书 │
└─────────────────────────────────────────────────────────────────────────────┘
2.2 部署架构
┌─────────────────────────────────┐
│ 用户 (Web/移动端) │
└───────────────┬─────────────────┘
│ HTTPS
▼
┌─────────────────────────────────┐
│ Nginx / F5 负载均衡器 │
│ (SSL终结、路由分发、健康检查) │
└───────────────┬─────────────────┘
│
┌─────────────────────────┼─────────────────────────┐
│ │ │
▼ ▼ ▼
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ MaxKey认证节点1 │ │ MaxKey认证节点2 │ │ MaxKey认证节点3 │
│ (maxkey-web) │ │ (maxkey-web) │ │ (maxkey-web) │
└────────┬────────┘ └────────┬────────┘ └────────┬────────┘
│ │ │
└───────────────────────┼───────────────────────┘
│
┌────────────┴────────────┐
│ │
▼ ▼
┌─────────────────┐ ┌─────────────────────┐
│ Redis集群 │ │ MySQL主从集群 │
│ (会话共享/缓存) │ │ (用户/应用/权限数据) │
└─────────────────┘ └─────────────────────┘
│ │
▼ ▼
┌─────────────────────────────────────────┐
│ Kafka / RocketMQ 集群 │
│ (身份同步消息队列) │
└─────────────────────────────────────────┘
2.3 核心组件说明
| MaxKey认证服务 | 处理登录认证、票据颁发、单点登录 | 至少3节点集群 |
| MaxKey管理服务 | 后台管理(用户、应用、权限配置) | 与认证服务分离部署 |
| Nginx/F5 | 负载均衡、SSL终结、静态资源缓存 | 配置健康检查 |
| MySQL主从集群 | 存储用户、组织、应用、权限等核心数据 | 主从复制+定期备份 |
| Redis集群 | 分布式会话存储、缓存加速 | 至少6节点(3主3从) |
| Kafka/RocketMQ | 身份同步事件消息分发 | 3节点集群 |
三、统一登录门户设计
3.1 门户功能架构
统一登录门户是员工日常访问所有业务系统的入口,需要提供良好的用户体验。
┌─────────────────────────────────────────────────────────────────┐
│ 🔐 企业统一身份认证平台 [语言切换] [帮助] │
├─────────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────────────────┐ │
│ │ 欢迎回来,张工 │ │
│ │ 请输入您的凭证继续 │ │
│ │ │ │
│ │ 👤 用户名/工号 │ │
│ │ [________________] │ │
│ │ │ │
│ │ 🔒 密码 │ │
│ │ [________________] │ │
│ │ │ │
│ │ 📷 验证码 │ │
│ │ [____] [验证码图片] │ │
│ │ │ │
│ │ [ 登 录 ] │ │
│ │ │ │
│ │ 🔑 扫码登录 │ SSO │ │
│ │ 企业微信/钉钉 │ │
│ └─────────────────────────┘ │
│ │
│ 忘记密码? | 首次登录引导 │
└─────────────────────────────────────────────────────────────────┘
3.2 登录后应用导航(门户首页)
┌─────────────────────────────────────────────────────────────────┐
│ 🔐 企业统一身份认证平台 张工 (生产部) [退出] │
├─────────────────────────────────────────────────────────────────┤
│ │
│ 📊 我的应用 │
│ ┌──────┐ ┌──────┐ ┌──────┐ ┌──────┐ ┌──────┐ ┌──────┐ │
│ │ ERP │ │ MES │ │ PLM │ │ CRM │ │ OA │ │ 邮件 │ │
│ │生产管理│ │制造执行│ │产品管理│ │客户管理│ │办公自动化│ │企业邮箱│ │
│ └──────┘ └──────┘ └──────┘ └──────┘ └──────┘ └──────┘ │
│ ┌──────┐ ┌──────┐ ┌──────┐ ┌──────┐ │
│ │ SCM │ │ BI │ │ HR │ │ 更多 │ │
│ │供应链 │ │商业智能│ │人事管理│ │ + │ │
│ └──────┘ └──────┘ └──────┘ └──────┘ │
│ │
│ 📌 最近访问 │
│ • ERP系统 – 生产工单审批 (刚刚) │
│ • MES系统 – 产线报表查看 (10分钟前) │
│ │
│ 🔔 待办提醒 (3) │
│ • 您有2条ERP生产工单待审批 │
│ • 您有1条OA报销流程待处理 │
│ │
│ 🛡️ 安全状态: ✅ 已启用MFA | 上次登录: 2026-08-09 08:30 │
└─────────────────────────────────────────────────────────────────┘
3.3 门户技术实现
登录门户采用前后端分离架构:
- 前端:基于React/Ant Design构建,支持响应式布局,适配PC和移动端
- 后端:MaxKey认证服务提供RESTful API,支持标准OAuth 2.0/OIDC登录流程
- 应用图标与跳转:每个应用配置图标、名称和SSO跳转URL,用户点击后通过对应协议(CAS/OAuth2/OIDC/SAML)自动完成登录跳转
四、多协议支持与异构系统集成
4.1 协议适配矩阵
MaxKey支持8大标准认证协议,可根据不同系统的技术栈和接入需求灵活选择:
| OAuth 2.0/OIDC | 现代Web应用、移动App、API网关 | 新开发系统、微服务 | ★★★★★ |
| CAS | 传统Java Web应用 | 老旧Java系统、高校/科研类系统 | ★★★★★ |
| SAML 2.0 | 企业级应用、跨国集团系统 | Oracle、SAP等商业软件 | ★★★★★ |
| JWT | 无状态API认证、微服务间认证 | RESTful API、微服务 | ★★★★★ |
| FormBased | 传统表单登录系统 | 定制开发的B/S系统 | ★★★★ |
| TokenBased | 桌面应用、移动应用 | C/S架构系统 | ★★★★ |
| SCIM 2.0 | 身份供给同步 | HR系统、云应用 | ★★★★★ |
4.2 多语言应用集成方案
针对企业内部Java、Python、C#等不同语言开发的系统,MaxKey提供多种集成方式:
4.2.1 Java应用集成(OAuth 2.0/OIDC)
// Spring Boot应用集成MaxKey OIDC
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.oauth2Login(oauth2 -> oauth2
.loginPage("https://maxkey.company.com/login")
.clientRegistrationRepository(clientRegistrationRepository())
.authorizationEndpoint(auth -> auth
.baseUri("/oauth2/authorization"))
.redirectionEndpoint(redir -> redir
.baseUri("/login/oauth2/code/*"))
)
.oauth2Client(withDefaults());
}
@Bean
public ClientRegistrationRepository clientRegistrationRepository() {
return new InMemoryClientRegistrationRepository(
ClientRegistration.withRegistrationId("maxkey")
.clientId("your-client-id")
.clientSecret("your-client-secret")
.clientAuthenticationMethod(ClientAuthenticationMethod.CLIENT_SECRET_BASIC)
.authorizationGrantType(AuthorizationGrantType.AUTHORIZATION_CODE)
.redirectUri("{baseUrl}/login/oauth2/code/{registrationId}")
.scope("openid", "profile", "email")
.authorizationUri("https://maxkey.company.com/auth/authorize")
.tokenUri("https://maxkey.company.com/auth/token")
.userInfoUri("https://maxkey.company.com/auth/userinfo")
.jwkSetUri("https://maxkey.company.com/auth/jwks")
.issuerUri("https://maxkey.company.com")
.userNameAttributeName("sub")
.build()
);
}
}
4.2.2 Python应用集成(OAuth 2.0/OIDC)
# Django应用集成MaxKey OIDC
# 使用 django-oauth-toolkit 或 python-social-auth
import requests
from authlib.integrations.django_client import OAuth
oauth = OAuth()
oauth.register(
name='maxkey',
client_id='your-client-id',
client_secret='your-client-secret',
server_metadata_url='https://maxkey.company.com/.well-known/openid-configuration',
client_kwargs={
'scope': 'openid profile email'
}
)
# 登录视图
def login(request):
redirect_uri = request.build_absolute_uri('/auth/callback')
return oauth.maxkey.authorize_redirect(request, redirect_uri)
# 回调处理
def callback(request):
token = oauth.maxkey.authorize_access_token(request)
user_info = oauth.maxkey.parse_id_token(request, token)
# 创建/更新本地用户会话
request.session['user'] = user_info
return redirect('/dashboard')
4.2.3 C#/.NET应用集成(OAuth 2.0/OIDC)
// ASP.NET Core 集成MaxKey OIDC
using Microsoft.AspNetCore.Authentication.OpenIdConnect;
using Microsoft.IdentityModel.Protocols.OpenIdConnect;
public void ConfigureServices(IServiceCollection services)
{
services.AddAuthentication(options =>
{
options.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme;
options.DefaultChallengeScheme = OpenIdConnectDefaults.AuthenticationScheme;
})
.AddCookie()
.AddOpenIdConnect(options =>
{
options.Authority = "https://maxkey.company.com";
options.ClientId = "your-client-id";
options.ClientSecret = "your-client-secret";
options.ResponseType = OpenIdConnectResponseType.Code;
options.Scope.Add("openid");
options.Scope.Add("profile");
options.Scope.Add("email");
options.SaveTokens = true;
options.GetClaimsFromUserInfoEndpoint = true;
});
}
public void Configure(IApplicationBuilder app)
{
app.UseAuthentication();
app.UseAuthorization();
// …
}
4.2.4 传统CAS协议应用接入
对于仍在使用CAS协议的老旧Java应用,MaxKey提供CAS协议适配器:
<!– 在web.xml中配置CAS Client –>
<filter>
<filter-name>CAS Authentication Filter</filter-name>
<filter-class>org.jasig.cas.client.authentication.AuthenticationFilter</filter-class>
<init-param>
<param-name>casServerLoginUrl</param-name>
<param-value>https://maxkey.company.com/cas/login</param-value>
</init-param>
<init-param>
<param-name>serverName</param-name>
<param-value>https://app.company.com</param-value>
</init-param>
</filter>
4.3 身份同步方案
4.3.1 多源身份数据聚合
制造业企业通常存在多个身份数据源(HR系统、AD域控、企业微信等)。MaxKey通过身份同步层实现多源数据聚合:
┌─────────────────────────────────┐
│ MaxKey 身份同步层 │
│ (Synchronizer) │
└─────────────────────────────────┘
▲
┌───────────────────────┼───────────────────────┐
│ │ │
▼ ▼ ▼
┌───────────────┐ ┌───────────────┐ ┌───────────────┐
│ HR系统 │ │ AD域控 │ │ 企业微信 │
│ (JDBC同步器) │ │ (LDAP同步器) │ │ (API同步器) │
│ 员工主数据 │ │ 域账号/密码 │ │ 组织/通讯录 │
└───────────────┘ └───────────────┘ └───────────────┘
同步策略:
- HR系统为权威数据源:员工入职、离职、调岗信息从HR系统同步(每日凌晨全量+实时增量)
- AD域控同步:Windows域账号与MaxKey用户关联,支持Kerberos/SPNEGO域认证
- 企业微信/钉钉同步:组织架构和通讯录双向同步,支持扫码登录
4.3.2 SCIM 2.0标准供给
对于支持SCIM 2.0协议的云应用或第三方系统,MaxKey提供标准的SCIM 2.0接口进行身份供给:
MaxKey ──(SCIM 2.0)──► 云应用A (如Salesforce)
──(SCIM 2.0)──► 云应用B (如Workday)
──(SCIM 2.0)──► 第三方SaaS平台
4.4 单点登录流程(OIDC标准模式)
以员工访问ERP系统为例,完整SSO流程如下:
ERP系统MaxKey认证服务统一登录门户员工ERP系统MaxKey认证服务统一登录门户员工#mermaid-svg-9xkCBb84gS3bhsZg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-9xkCBb84gS3bhsZg .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-9xkCBb84gS3bhsZg .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-9xkCBb84gS3bhsZg .error-icon{fill:#552222;}#mermaid-svg-9xkCBb84gS3bhsZg .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-9xkCBb84gS3bhsZg .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-9xkCBb84gS3bhsZg .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-9xkCBb84gS3bhsZg .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-9xkCBb84gS3bhsZg .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-9xkCBb84gS3bhsZg .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-9xkCBb84gS3bhsZg .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-9xkCBb84gS3bhsZg .marker{fill:#333333;stroke:#333333;}#mermaid-svg-9xkCBb84gS3bhsZg .marker.cross{stroke:#333333;}#mermaid-svg-9xkCBb84gS3bhsZg svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-9xkCBb84gS3bhsZg p{margin:0;}#mermaid-svg-9xkCBb84gS3bhsZg .actor{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-9xkCBb84gS3bhsZg text.actor>tspan{fill:black;stroke:none;}#mermaid-svg-9xkCBb84gS3bhsZg .actor-line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);}#mermaid-svg-9xkCBb84gS3bhsZg .innerArc{stroke-width:1.5;stroke-dasharray:none;}#mermaid-svg-9xkCBb84gS3bhsZg .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333;}#mermaid-svg-9xkCBb84gS3bhsZg .messageLine1{stroke-width:1.5;stroke-dasharray:2,2;stroke:#333;}#mermaid-svg-9xkCBb84gS3bhsZg #arrowhead path{fill:#333;stroke:#333;}#mermaid-svg-9xkCBb84gS3bhsZg .sequenceNumber{fill:white;}#mermaid-svg-9xkCBb84gS3bhsZg #sequencenumber{fill:#333;}#mermaid-svg-9xkCBb84gS3bhsZg #crosshead path{fill:#333;stroke:#333;}#mermaid-svg-9xkCBb84gS3bhsZg .messageText{fill:#333;stroke:none;}#mermaid-svg-9xkCBb84gS3bhsZg .labelBox{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-9xkCBb84gS3bhsZg .labelText,#mermaid-svg-9xkCBb84gS3bhsZg .labelText>tspan{fill:black;stroke:none;}#mermaid-svg-9xkCBb84gS3bhsZg .loopText,#mermaid-svg-9xkCBb84gS3bhsZg .loopText>tspan{fill:black;stroke:none;}#mermaid-svg-9xkCBb84gS3bhsZg .loopLine{stroke-width:2px;stroke-dasharray:2,2;stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);}#mermaid-svg-9xkCBb84gS3bhsZg .note{stroke:#aaaa33;fill:#fff5ad;}#mermaid-svg-9xkCBb84gS3bhsZg .noteText,#mermaid-svg-9xkCBb84gS3bhsZg .noteText>tspan{fill:black;stroke:none;}#mermaid-svg-9xkCBb84gS3bhsZg .activation0{fill:#f4f4f4;stroke:#666;}#mermaid-svg-9xkCBb84gS3bhsZg .activation1{fill:#f4f4f4;stroke:#666;}#mermaid-svg-9xkCBb84gS3bhsZg .activation2{fill:#f4f4f4;stroke:#666;}#mermaid-svg-9xkCBb84gS3bhsZg .actorPopupMenu{position:absolute;}#mermaid-svg-9xkCBb84gS3bhsZg .actorPopupMenuPanel{position:absolute;fill:#ECECFF;box-shadow:0px 8px 16px 0px rgba(0,0,0,0.2);filter:drop-shadow(3px 5px 2px rgb(0 0 0 / 0.4));}#mermaid-svg-9xkCBb84gS3bhsZg .actor-man line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-9xkCBb84gS3bhsZg .actor-man circle,#mermaid-svg-9xkCBb84gS3bhsZg line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;stroke-width:2px;}#mermaid-svg-9xkCBb84gS3bhsZg :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}alt[未登录][已登录]访问门户首页检查登录状态(验证Session/TGT)返回未登录展示登录页面输入账号密码+MFA提交认证请求验证凭证、创建会话返回Token/票据展示应用导航会话有效展示应用导航点击ERP系统图标请求ERP的SSO票据生成ST/Code返回票据携带票据跳转 (OIDC Authorization Code)后台验证票据 (Token Exchange)返回用户身份信息建立本地会话展示ERP首页(无需再次登录)
五、安全设计
5.1 多因素认证(MFA)
MaxKey支持多种MFA方式,可根据安全等级灵活配置:
| TOTP时间令牌 | 全员标配(Google Authenticator/Microsoft Authenticator) | 高 |
| 短信验证码 | 备用方式、移动端场景 | 中 |
| 邮件验证码 | 低风险操作 | 中 |
| 扫码登录 | 企业微信/钉钉/飞书扫码 | 高 |
| 域认证 | Windows域环境(Kerberos/SPNEGO) | 高 |
MFA策略配置:
- 全员强制开启TOTP + 短信验证码双因素
- 财务系统、ERP核心模块等敏感应用额外触发二次密码校验
- 非信任网络/IP触发增强验证
5.2 二次密码登录
MaxKey特有的二次密码登录功能,针对关键系统提供额外保护:
针对特定用户、特定应用进行二次密码校验,防止关键系统因账号代理导致的信息泄露,如财务系统或个人工资账单。
配置示例:
- 所有用户访问财务系统时,需额外输入一次独立密码
- 生产主管访问MES系统修改工艺参数时触发二次确认
5.3 审计与合规
- 全生命周期审计:对用户从创建到注销的全过程进行记录追溯
- 访问行为审计:记录每次登录时间、IP、设备、访问的应用
- 安全风险预警:异常登录检测(异地登录、非工作时间登录、暴力破解)
- IP地理定位:支持Ip2region或GeoLite2精准IP定位
- SIEM对接:审计日志可导出至企业SIEM系统进行集中监控
5.4 密码策略
- 最小长度、复杂度要求(大小写+数字+特殊字符)
- 定期更换(如90天)
- 历史密码防重用(如最近5次不可重复)
- 首次登录强制修改初始密码
- 自助密码重置服务
六、实施路线图
6.1 分阶段实施计划
| 第一阶段:基础平台建设 | 第1-2月 | MaxKey平台部署、高可用集群搭建、基础配置 | 生产环境可用的MaxKey集群 |
| 第二阶段:身份数据整合 | 第2-3月 | HR系统同步器开发、AD域控对接、企业微信同步 | 统一身份数据源 |
| 第三阶段:门户与核心应用接入 | 第3-4月 | 统一登录门户上线、ERP/MES/OA等核心系统SSO接入 | 核心系统SSO可用 |
| 第四阶段:全面推广 | 第4-6月 | 剩余系统接入、MFA推广、培训与文档 | 全系统覆盖 |
6.2 应用接入优先级
| P0 | ERP、MES | OIDC | 最核心业务系统,优先接入 |
| P0 | OA、企业邮箱 | OIDC/CAS | 高频使用系统 |
| P1 | PLM、CRM | OIDC/SAML | 产品数据与客户管理 |
| P1 | SCM、HR | OIDC/JWT | 供应链与人事管理 |
| P2 | BI、报表系统 | OIDC | 数据分析类系统 |
| P2 | 其他辅助系统 | 按需适配 | 根据实际情况选择协议 |
6.3 风险与应对
| 老旧系统不支持标准协议 | 无法直接接入SSO | 使用MaxKey ExtendApi适配器或FormBased适配器进行封装 |
| 身份数据不一致 | 同步后用户信息冲突 | 确立HR系统为权威数据源,制定数据清洗和映射规则 |
| 业务中断风险 | 切换期间影响生产 | 采用灰度发布策略,新旧认证方式并行运行一段时间 |
| 员工适应成本 | 初期使用不习惯 | 充分培训、制作操作手册、设立支持热线 |
七、二次开发指南
7.1 开发环境搭建
# 克隆MaxKey源码
git clone https://gitee.com/dromara/MaxKey.git
cd MaxKey
# 配置JDK和Gradle环境
# 修改 set_maxkey_env.sh 中的安装路径
# 构建项目
./gradlew clean build
7.2 自定义协议适配器
对于企业内部特有的非标准认证系统,可通过MaxKey的ExtendApi进行扩展:
// 参考:org.maxkey.authz.exapi.endpoint.adapter.ExtendApiTimestampSignAdapter
public class CustomExtendApiAdapter extends AbstractAuthorizeAdapter {
@Override
public boolean authenticate(AuthorizeRequest request) {
// 实现自定义认证逻辑
// 例如:对接企业内部的Token验证服务
String token = request.getParameter("token");
return validateWithInternalService(token);
}
private boolean validateWithInternalService(String token) {
// 调用企业内部认证API
// 返回验证结果
}
}
7.3 自定义身份同步器
对接企业特有的身份源系统:
// 在 maxkey-synchronizers 模块下创建新的同步器
public class CustomHrSyncSynchronizer implements Synchronizer {
@Override
public void sync() {
// 1. 从HR系统拉取用户和组织数据
List<User> users = fetchFromHrSystem();
// 2. 转换为MaxKey用户模型
List<UserModel> maxKeyUsers = convert(users);
// 3. 通过Kafka/RocketMQ分发同步事件
sendToMessageQueue(maxKeyUsers);
}
}
7.4 二次开发注意事项
八、总结
本方案基于MaxKey开源项目,为大型制造业企业设计了一套完整的统一身份认证平台。方案的核心价值在于:
该方案的实施将显著提升企业的身份管理效率、降低安全风险、改善员工体验,为企业的数字化转型奠定坚实的身份基础设施。

