Security

你的员工有24个密码,你的企业就有24个攻击面

大多数企业不会意识到自身存在身份管理问题——直到安全事故发生之后。

离职员工的账户仍在三个系统中保持活跃,因为没有人更新离职操作清单。某外包人员能够访问财务门户,因为六个月前申请了"临时"访问权限,工单从未关闭。一次网络钓鱼攻击得逞——不是因为安全防护薄弱,而是因为团队在管理24套独立的登录系统,没有人注意到其中一个根本没有启用MFA。

这是大多数运营15至30套内部系统的中型企业所面临的现实。不是疏忽大意,只是系统复杂度的增长速度远超管理基础设施的建设速度。


问题不在于你的员工

员工跨系统重复使用密码,这不是纪律问题——而是人机工程问题。IT部门需要三天才能完成离职员工的权限撤销,这不是流程问题——而是架构问题。

每个自行管理登录的系统都是一座孤岛。每座孤岛有自己的密码、自己的会话规则、自己的访问列表。而且每座孤岛对其他孤岛都是不可见的。

安全风险在悄无声息中不断积累:

  • 一名仓库主管离职。HR禁用了他的Microsoft 365账户。但他的ERP登录、报表门户、仓库管理系统——这些系统使用独立的凭据,没有人想到要撤销。
  • 一名财务经理的笔记本电脑被盗。IT立即重置了她的邮箱密码。但应收账款门户使用的是另一个密码,写在桌上的便利贴上。
  • 一次审计要求提供Q3财务数据访问日志,记录哪些人访问了哪些数据。每个系统有自己的日志,有些系统根本没有日志。

这些都不是假设场景,而是分散式身份基础设施的标准故障模式。


SSO真正解决的问题

单点登录(SSO)不是一个提升登录便利性的功能,而是一个身份控制层——一个架构决策,让单一系统负责回答这个问题:这个人是谁,他们被允许做什么?

当每个应用程序都将这个问题委托给单一的身份提供商时,有几件事将在结构层面变得不可能:

幽灵账户消失。 当员工在Azure AD中被停用时,所有已连接系统同时失去访问权限。不需要等待清单。不需要等三天。立即,自动完成。

审计追踪变得完整。 每一次登录、每一个会话、每一次访问尝试都流经同一个系统。一份日志。一次查询。完整的全貌。

MFA成为普遍标准。 不再寄希望于每个应用程序都正确配置了MFA,而是在身份层统一强制执行一次。每个应用程序自动继承。

凭据窃取的危害大幅降低。 一个被钓鱼的密码在能解锁多个系统时才是危险的。使用SSO后,员工不再有多个密码可供窃取——而且单一认证点可以对敏感系统强制执行阶梯式验证。


实际工作原理

架构非常直接。一个身份提供商——在这里是与Microsoft 365联合的Authentik——位于所有内部系统之前。每个应用程序都指向它进行登录。Authentik指向Azure AD来验证用户身份。

flowchart TD
    subgraph STAFF["👤 员工"]
        B[...]
    end

    subgraph PORTAL["🌐 应用门户"]
        AP[...]
    end

    subgraph AUTHENTIK["🔐 Authentik — 身份提供商"]
        AK[所有系统的\n统一登录入口]
    end

    subgraph AZURE["☁️ Microsoft 365 / Azure AD"]
        AAD[所有身份信息的\n可信来源]
    end

    subgraph APPS["你的24个系统"]
        direction LR
        T1["🖥️ ERP · 财务 · 仓储\n文档管理 · HR门户"]
        T2["📱 邮件 · 电话 · 消息"]
        T3["🖨️ 打印机 · 硬件"]
    end

    B -->|"一次登录"| AP
    AP -->|"这个用户是谁?"| AUTHENTIK
    AUTHENTIK -->|"验证身份"| AZURE
    AZURE -->|"已确认"| AUTHENTIK
    AUTHENTIK -->|"授予访问权限 + 角色"| APPS

    style AUTHENTIK fill:#EBF3FB,stroke:#2E75B6,stroke-width:2px
    style AZURE fill:#E8F4E8,stroke:#375623,stroke-width:2px
    style STAFF fill:#FFF9E6,stroke:#7F6000,stroke-width:2px
    style PORTAL fill:#FFF9E6,stroke:#7F6000,stroke-width:1px
    style APPS fill:#F5F5F5,stroke:#999999,stroke-width:1px

员工对这一切毫无感知。他们打开门户,点击所需的应用,直接进入。如果当天早上已经登录过Microsoft账户,他们甚至不会看到任何登录界面。

首次登录时发生的事情:

sequenceDiagram
    actor Staff as 员工
    participant Portal as 应用门户
    participant Authentik as Authentik
    participant Azure as Azure AD
    participant App as 24个系统中的任意一个

    Staff->>Portal: 打开浏览器
    Portal->>Authentik: 未找到会话
    Authentik->>Azure: 重定向至MS365登录页
    Azure-->>Staff: 输入邮箱 + 密码
    Staff->>Azure: 身份验证(+ MFA)
    Azure-->>Authentik: 身份已确认
    Note over Authentik: 检查用户组、应用角色、<br/>强制执行MFA策略
    Authentik-->>Staff: 会话已建立 ✓
    Portal-->>Staff: 显示个性化应用磁贴

    Staff->>App: 点击任意磁贴
    Note over Authentik: 会话已存在 — 跳过登录
    Authentik->>App: 签发含角色信息的访问令牌
    App-->>Staff: 访问已授权 ✓

此后每次登录:

sequenceDiagram
    actor Staff as 员工
    participant App as 24个系统中的任意一个
    participant Authentik as Authentik

    Staff->>App: 直接打开应用
    App->>Authentik: 验证会话
    Note over Authentik: 会话有效 — 无需重新登录
    Authentik->>App: 签发访问令牌
    App-->>Staff: 访问已授权 ✓ — 无需任何输入

在幕后,身份提供商在每次请求时都在进行大量工作:验证会话、检查用户组成员资格、执行MFA策略、向访问令牌注入基于角色的声明,以及写入统一的审计日志。

对于你的应用程序来说,集成非常轻量。每个系统只需要一个客户端ID和一个客户端密钥。它从单一配置URL自动发现所有认证端点。当用户到达时,应用程序请求身份提供商为其背书。身份提供商返回一个包含应用程序所需全部信息的签名令牌——身份、用户组、角色、访问级别。应用程序授权访问,继续运行。

定制化工作量极少:将现有Azure AD用户组映射到应用程序专属角色,为敏感系统配置阶梯式MFA,以及构建门户磁贴启动器,使每个用户只看到被授权访问的应用程序。


离职问题,彻底解决

SSO最被低估的优势在于员工离职时会发生什么。

在分散的系统中,离职处理是一份清单。某个人——通常是IT,有时是HR,偶尔是无人负责——逐系统检查清单,手动撤销访问权限。系统会被遗漏。新应用程序加入时清单不会更新。维护清单的人六个月前已经离职。

使用SSO和SCIM自动预置,离职处理是一个事件,而不是一个流程。在Azure AD中停用账户的那一刻,SCIM推送将这一变化传播到身份提供商。活跃会话被立即作废。所有已连接的应用程序停止接受该身份。全部24个系统,同时,不需要任何清单。

sequenceDiagram
    participant HR as 人力资源 / 管理者
    participant Azure as Azure AD
    participant Authentik as Authentik
    participant Apps as 全部24个系统

    HR->>Azure: 停用员工账户
    Azure->>Authentik: SCIM推送 — 账户已停用
    Note over Authentik: 作废所有活跃会话
    Authentik-->>Apps: 撤销全部24个系统的访问权限
    Note over Apps: 同步完成。无需清单。<br/>无遗漏。无被遗忘的系统。
    HR-->>HR: 完成 ✓

与另一种方案相比:一份需要逐系统手动处理的清单,由一个可能不知道该员工访问了哪些系统的人来执行,依据的是自上次IT交接后就再未更新过的文档。

对于员工流动率较高的企业——在食品制造和分销行业中普遍存在——这绝非小事。每多一天,一个已被停用的账户仍能访问生产系统,就是一天悬而未决的安全责任。


实施过程中可以期待什么

针对24个系统的合理范围SSO实施,从头到尾大约需要10周时间。各阶段进展清晰可预期:

前两周建立基础:安装身份提供商,连接到你的Microsoft 365租户,验证联合身份认证正常运作。此阶段尚未迁移任何应用程序——纯粹是基础设施工作。

第三至四周连接全部24个应用程序。每个应用程序以客户端ID、重定向URI和访问策略完成注册。基于用户组的授权配置完毕。配置以版本控制的YAML蓝图导出——可复现,可审计。

第五周处理定制化工作:为Infor M3等需要在访问令牌中包含应用程序专属属性的系统进行ERP角色映射,为敏感系统配置阶梯式MFA策略。

第六周交付面向用户的层:应用程序门户、本地语言界面、所有认证界面的企业品牌形象。

第七至八周通过账户关联阶段连接通信工具——电话系统、即时通讯平台——将每位员工的应用账户与其Azure AD身份绑定。

最后两周进行测试、用户验收和交接:每个应用程序的完整测试计划、与IT团队的UAT会议、涵盖架构说明、管理操作手册和紧急访问协议的完整文档包。


值得思考的问题

问题不是你的组织是否需要集中式身份管理。如果你运营着超过十个内部系统,你已经需要它了。

问题是,你会在问题暴露之前,还是之后,意识到这个需求。

一个没有MFA的老旧ERP系统,一个离职员工的凭据仍在仓库系统中有效,一个因为日志分散在十二个应用程序中而无法响应的审计请求——这些不是边缘案例,而是在没有架构支撑下扩展的身份基础设施可以预见的结果。

SSO无法消除所有安全风险,但它消除了源于分散化的特定风险类别:幽灵账户、无声的凭据复用、离职管理的漏洞、审计的盲区。

对于运行Microsoft 365的企业,基础已经具备。Azure AD是你已经在为其付费的身份权威机构。工作就是将其余23个系统连接到它——并确保这种连接是稳健的、可审计的、集中管控的。


有兴趣将现有系统接入集中式SSO层?我们与使用Microsoft 365的企业合作,基于Authentik构建身份基础设施——涵盖OIDC、SAML2、LDAP,以及面向ERP和通信工具的定制集成。欢迎联系我们,探讨适合你们环境的解决方案。