moklgy's blog moklgy's blog
首页
  • 前端文章

    • JavaScript
  • 学习笔记

    • 《JavaScript教程》
    • 《JavaScript高级程序设计》
    • 《ES6 教程》
    • 《Vue》
    • 《React》
    • 《TypeScript 从零实现 axios》
    • 《Git》
    • TypeScript
    • JS设计模式总结
  • 后端文章

    • 技术题
  • .netcore

    • 《asp.netcore》笔记
    • 《设计模式》
  • HTML
  • CSS
  • 技术文档
  • GitHub技巧
  • Nodejs
  • 博客搭建
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

moklgy docs

全栈初级开发工程师
首页
  • 前端文章

    • JavaScript
  • 学习笔记

    • 《JavaScript教程》
    • 《JavaScript高级程序设计》
    • 《ES6 教程》
    • 《Vue》
    • 《React》
    • 《TypeScript 从零实现 axios》
    • 《Git》
    • TypeScript
    • JS设计模式总结
  • 后端文章

    • 技术题
  • .netcore

    • 《asp.netcore》笔记
    • 《设计模式》
  • HTML
  • CSS
  • 技术文档
  • GitHub技巧
  • Nodejs
  • 博客搭建
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • asp.netcore

  • 《设计模式》

  • Auth2

    • 鉴权服务中心
    • abp框架

    • 后端
    • Auth2
    moklgy
    2026-03-11
    目录

    鉴权服务中心

    在写任何代码之前,先理清**“我们要对外提供什么能力”(API 接口)以及“内部如何分工”**(模块规划),是架构设计的核心。

    鉴于你的需求是**“独立一套鉴权服务器,管理 ERP、MES、WMS 等多系统的鉴权”**,我们需要将系统分为两大部分:

    1. OIDC 协议层:处理标准的 OpenID Connect 流程(颁发令牌、校验令牌、跳转登录),这部分主要是给**机器(浏览器、后端服务)**看的。
    2. 管理 API 层:用于后台管理(注册新的 ERP 系统、创建用户、分配权限),这部分是给管理员看的。

    以下是基于 ABP 架构风格(DDD 分层)的模块规划和接口清单。


    # 一、 模块职责规划 (Module Architecture)

    根据你要求的工程结构,我们将职责分配如下:

    # 1. AuthCenter.Domain (领域核心)

    • 核心职责:定义“什么是一个客户端”、“什么是一个用户”。
    • 包含内容:
      • AppUser / AppRole:用户与角色实体。
      • ClientManager (Domain Service):封装 OpenIddict 的底层逻辑,提供业务语义的方法(如 CreateMesClientAsync)。
      • ScopeManager (Domain Service):管理资源定义(如定义 "wms-service" 资源)。

    # 2. AuthCenter.Application (应用逻辑)

    • 核心职责:作为 API 和 Domain 的中间人,处理 DTO 转换、输入校验。
    • 包含内容:
      • ClientAppService:实现“注册 ERP”、“修改 MES 回调地址”等逻辑。
      • IdentityAppService:实现“创建员工账号”、“重置密码”等逻辑。
      • ScopeAppService:实现“添加新的 API 资源”逻辑。

    # 3. AuthCenter.AuthServer.Host (宿主与接口)

    • 核心职责:暴露 HTTP 接口,启动 OpenIddict 中间件。
    • 包含内容:
      • AuthorizationController:心脏部位。处理 /connect/token 等标准 OIDC 请求。
      • Management API Controllers:暴露给前端管理后台使用的 RESTful API。

    # 二、 接口清单 (API List)

    我们需要实现三类接口:标准协议接口、应用管理接口、身份管理接口。

    # 1. OIDC 标准协议接口 (Protocol Endpoints)

    这些接口通常不通过 Swagger 暴露给普通人看,而是写死在 ERP/MES 的配置文件中的。

    HTTP 方法 路由 (Endpoint) 用途 备注
    GET /.well-known/openid-configuration 发现文档 ERP 系统启动时调用此接口,获取公钥和配置信息。
    POST /connect/token 令牌交换 核心接口。用 密码/Code/ClientSecret 换取 JWT Token。
    GET/POST /connect/authorize 认证请求 浏览器跳转接口。ERP 发现未登录,跳到这里显示登录页。
    GET/POST /connect/logout 登出 销毁 Session,通知 ERP 登出。
    GET /connect/userinfo 用户信息 ERP 拿到 Token 后,调用此接口获取用户的 Name, Email 等。
    POST /connect/introspect 令牌内省 (可选) WMS 收到 Token 后,询问 AuthServer 这张票是否有效。

    # 2. 应用客户端管理接口 (Client Management APIs)

    这是为了满足你“配置不同的服务”的需求。你需要一个管理后台来调用这些接口。
    对应服务:AuthCenter.Application.Clients.ClientAppService

    HTTP 方法 路由 接口名 参数示例 (DTO) 用途
    POST /api/app/clients 注册应用 { "clientId": "mes_web", "displayName": "MES系统", "type": "public" } 注册一个新的系统接入鉴权中心。
    GET /api/app/clients 获取列表 ?skipCount=0&maxResultCount=10 查看当前接入了哪些系统(ERP, WMS等)。
    GET /api/app/clients/{id} 获取详情 {id} 查看某个系统的详细配置(回调地址、密钥)。
    PUT /api/app/clients/{id} 更新应用 { "redirectUris": ["https://mes.com/signin"] } 当 MES 域名变更时,更新回调地址。
    DELETE /api/app/clients/{id} 删除应用 {id} 吊销某个系统的接入权限。

    # 3. 资源/作用域管理接口 (Scope/Resource APIs)

    用于定义“权限范围”。比如 WMS 系统有些接口只允许 MES 调用,不允许 ERP 调用。
    对应服务:AuthCenter.Application.Scopes.ScopeAppService

    HTTP 方法 路由 接口名 参数示例 (DTO) 用途
    POST /api/app/scopes 创建作用域 { "name": "wms_api", "displayName": "WMS 后端接口全权" } 定义一个新的权限标识。
    GET /api/app/scopes 获取作用域 - 列出所有可用的权限资源。

    # 4. 身份管理接口 (Identity APIs)

    用于管理实际登录的人(操作员)。
    对应服务:AuthCenter.Application.Identity.IdentityAppService

    HTTP 方法 路由 接口名 参数示例 (DTO) 用途
    POST /api/identity/users 创建用户 { "userName": "zhangsan", "password": "..." } 新员工入职开户。
    GET /api/identity/users 查询用户 ?filter=zhang 搜索用户。
    PUT /api/identity/users/{id}/password 重置密码 { "newPassword": "..." } 忘记密码处理。

    # 三、 核心数据流向 (Data Flow)

    为了让你理解各个模块怎么配合,我们设想一个场景:管理员在后台注册了一个新的 WMS 系统。

    1. API层 (Host):
      • 管理员发送 POST /api/app/clients 请求,Payload: {"clientId": "wms_backend", ...}。
      • ClientController 接收请求。
    2. 应用层 (Application):
      • Controller 调用 IClientAppService.CreateAsync(CreateClientDto input)。
      • ClientAppService 做简单校验(如:ClientId 是否包含非法字符)。
      • 将 CreateClientDto 转换为 OpenIddict 需要的描述符 OpenIddictApplicationDescriptor。
    3. 领域层 (Domain) & 基础设施 (OpenIddict):
      • ClientAppService 调用 IOpenIddictApplicationManager.CreateAsync(descriptor)。
      • OpenIddict 的 Manager 内部会调用 OpenIddict.EntityFrameworkCore 的 Store。
      • Store 将数据写入数据库表 OpenIddictApplications。

    # 四、 下一步计划

    按照这个接口清单,我们的开发顺序建议如下:

    1. 第一阶段(基础建设):搭建 Domain 和 EF Core 层,确保数据库能生成 OpenIddict 和 Identity 的表。(已在上一步涉及,但需细化配置)。
    2. 第二阶段(应用管理):实现 接口清单 2 (Client APIs)。因为没有 Client,鉴权就无从谈起。我们需要先写代码能把 ERP、MES 注册进去。
    3. 第三阶段(协议实现):实现 接口清单 1 (OIDC Endpoints)。核心是 AuthorizationController,让注册好的 Client 能拿到 Token。
    4. 第四阶段(界面与完善):如果需要,实现简单的登录 UI。

    你是否同意这个接口清单和开发顺序?如果没问题,我们可以开始第一阶段的详细代码实现,专注于 Domain 实体的配置。

    编辑 (opens new window)
    上次更新: 2026/03/04, 04:11:12
    《设计模式》
    聚合根

    ← 《设计模式》 聚合根→

    最近更新
    01
    聚合根
    03-11
    02
    补充
    02-06
    03
    基础
    02-06
    更多文章>
    Theme by Vdoing | Copyright © 2019-2026 moklgy's blog
    • 跟随系统
    • 浅色模式
    • 深色模式
    • 阅读模式