ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Elsa 外部认证(External Authentication)设计研究:多身份源代理、连接注册表与安全加固方案

Elsa 外部认证(External Authentication)设计研究:多身份源代理、连接注册表与安全加固方案 后端工作流自动化流程编排低代码【免费下载链接】elsa-coreThe Workflow Engine for .NET项目地址https://gitcode.com/gh_mirrors/el/elsa-core点击查看免费下载导读本文基于 elsa-core 仓库中 外部认证研究文档2026-07-24 批准的修订版展开系统梳理 Elsa 3.x 引入的服务器托管式外部认证External Authentication能力如何通过Identity Provider Connection身份提供方连接将多个外部身份源首个版本为 OpenID Connect统一代理到 Elsa Server如何编排配置来源与数据库来源的有效连接注册表如何在多租户、多节点环境下保证一次性授权码、刷新令牌轮换与撤销等安全语义。读完本文你将理解该功能的模块边界、运行时契约、数据模型与安全基线并能够在自己的部署中按配置优先方式接入外部登录。1. 修订决策总览Approved Revision研究文档在正式展开前首先给出了一组取代早期研究结论的修订决策它们构成了整个 v1 设计的骨架管理范围是主机级host-wideSSO 管理作用于当前连接的 Elsa 服务器环境不存在目标实体/环境字段记录 ID 用于管理资源和瞬态代理状态Connection Key连接键标识持久链接与长期会话。配置是基线Studio Override 是完整覆盖覆盖Override不做字段合并禁用的覆盖继续遮蔽配置归档的覆盖揭示配置恢复后重新遮蔽。OIDC 采用精确 HTTPSdiscoveryUrl以发现文档派生的信任为安全默认值受权限门控的 Advanced 设置可在确认与警告下覆盖 issuer、授权/令牌端点或签名密钥回调由部署外部基地址 固定路由 不可变 Connection Key 派生上游客户端为机密型强制使用 S256 PKCE支持client_secret_basic或client_secret_post。Secret Binding 声明 Managed 或 External 所有权Managed 走 Elsa SecretsExternal 走内置配置键解析器在 Studio 中只读值。每个连接选择 Unlinked Identity Policy未链接身份策略基于 matcher 的策略只选一个IExternalUserMatcher所需 claims 为临时性单匹配则链接、无匹配则拒绝或创建、歧义/错误则拒绝静态defaultRoleIds仅作用于新建用户。首选登录方法只做排序/强调选择器永不自动跳转。Elsa.Studio.Authentication.UI拥有登录/登出外壳Settings 仅做 UI 组合与导航SSO 连接位于/settings/sso-connectionsLinks 与 Sessions 归入 Security。只支持 Elsa 发起的登录/登出上游令牌是瞬态的仅保留配置登出所需的最小受保护工件。直接 OIDC 在整个 Elsa 3.x 仍然支持代理模式为推荐项移除属于未来大版本决策。这一节确立了配置优先、数据库可选、覆盖不合并、安全不妥协的基调后续所有章节都是对它的展开。2. 模块与包边界Module and Package Boundaries设计决策将功能拆分为Core/Server 模块 适配器包 持久化包 Studio 三包层包职责Core/ServerElsa.ExternalAuthentication协议无关契约、配置来源、有效注册表、代理服务、FastEndpoints 端点、安全通知、内存开发存储适配器Elsa.ExternalAuthentication.OpenIdConnect启动期安装的 v1 适配器桥接Elsa.ExternalAuthentication.Secrets可选的 Elsa Secrets 绑定桥接测试Elsa.ExternalAuthentication.UnitTests/IntegrationTests单元与集成测试Studio 共享Elsa.Studio.ExternalAuthenticationRefit 客户端、DTO、登录方式选择器、安全返回路径、连接与链接管理、描述符驱动表单、导航、共享令牌抽象Studio ServerElsa.Studio.ExternalAuthentication.BlazorServer机密客户端交换、服务端持有令牌、Cookie 会话、回调、刷新、登出Studio WebAssemblyElsa.Studio.ExternalAuthentication.BlazorWasm公共客户端 PKCE 交换、轮换刷新、浏览器令牌访问持久化Elsa.ExternalAuthentication.Persistence.EFCore及其各数据库提供方包独立的ExternalAuthenticationElsaDbContext遵循Elsa.Secrets.Persistence.EFCore*约定仓库中的实际代码与这一边界一一对应src/modules/Elsa.ExternalAuthentication/下包含 Endpoints/BrokerDiscoverLoginMethods、InitiateExternal、InitiateLocal、ExchangeToken、CompleteCallback、Logout 等、PoliciesReject、CreateUser、MatchExternalUser、ProvidersConfiguration / Database 两个连接来源以及 Stores/InMemory 的七个内存存储Elsa.ExternalAuthentication.OpenIdConnect 提供适配器实现Elsa.ExternalAuthentication.Secrets 提供ElsaSecretBindingResolver。设计要点独立的适配器包证明启动期安装的扩展边界成立。外部认证实体独立持久化可单独启用而不依赖 Identity 持久化特性是否开启。JITJust-In-Time用户创建走IUserStore/IUserProvider不再与 External Identity Link 共享数据库事务唯一索引IX_ExternalIdentityLink_Identity仲裁一个身份一条链接的不变式。被否决的备选方案包括并入Elsa.Identity边界不清、共享IdentityElsaDbContext无法独立启用、无法对接其他用户目录、单一 Studio 包Server 与 WebAssembly 的会话/令牌存储责任不兼容。3. 有效连接注册表Effective Connection Registry核心抽象是把多个连接来源组合成一个有效注册表public interface IIdentityProviderConnectionSource { string Name { get; } ConnectionSourceOwnership Ownership { get; } ValueTaskConnectionSourceSnapshot GetSnapshotAsync(CancellationToken cancellationToken default); } public interface IIdentityProviderConnectionRegistry { ValueTaskEffectiveConnectionRegistry GetHostAsync(CancellationToken cancellationToken default); ValueTaskEffectiveIdentityProviderConnection? FindByKeyAsync(string connectionKey, CancellationToken cancellationToken default); }完整签名见 runtime-contracts.mdv1 来源为部署配置与可选存储来源。语义要点记录保留稳定 ID逻辑 Connection Key 不可变。普通重复键被拒绝专门的 override 操作创建完整的持久化影子文档。Disabled 遮蔽配置、Archived 揭示配置、Restore 恢复遮蔽。注册表读取保持read-through穿透读取发现与发起直接读当前来源版本不依赖无界本地缓存共享单调注册表版本为将来条件刷新提供支持但不构成安全边界——权威状态始终来自存储。之所以不用把配置拷贝进数据库或无限缓存 pub/sub 失效是因为前者会混淆所有权并带来密钥迁移风险后者可能因失效丢失而暴露已禁用或过期的连接。仓库实现见 DefaultIdentityProviderConnectionRegistry.cs 与两个来源 ConfigurationIdentityProviderConnectionSource.cs、DatabaseIdentityProviderConnectionSource.cs。4. 持久化与原子性Persistence and Atomicity存储契约围绕必需的原子操作定义而不是通用的无条件保存按版本号revision对连接做compare-and-swap变更。主机级唯一的 Connection Key 创建或显式 override 创建。唯一元组(TargetTenantId, ConnectionKey, Issuer, Subject)的 External Identity Link 创建。原子 JITCreateLinkOrGetExistingAsync。原子一次性TryTakeAsync用于状态、完成码、预览结果与刷新令牌轮换。EF Core 提供方用数据库约束与事务实现内存提供方在单节点开发与单元测试中实现同样语义多节点部署必须共享提供方。为何不使用替代方案捕获唯一性异常后独立保存用户/链接无法可靠收敛或清理孤儿 JIT 用户直接用IDistributedCache则因标准契约不提供原子 take 或刷新令牌 compare-and-swap 而被否决。相关运行时契约可见 runtime-contracts.md 中的IExternalAuthenticationStateStore、IExternalIdentityProvisioner等接口。5. 代理状态与凭据模型Broker State and Credential Model代理状态采用密码学随机的不可读句柄opaque handles只持久化键控哈希与受保护状态句柄被原子消费。默认生命周期如下工件默认值行为提供方关联/状态10 分钟回调时一次性消费完成码completion code60 秒令牌交换时一次性消费预览状态/结果10 分钟仅发起管理员可读一次外部访问令牌现有IdentityTokenOptions.AccessTokenLifetime默认保持 1 小时以兼容外部刷新不活动期现有IdentityTokenOptions.RefreshTokenLifetime默认保持 2 小时外部会话最大年龄8 小时刷新轮换永不延长要点外部访问令牌仍是 Elsa JWT并携带External Authentication Session 标识符。外部刷新令牌是不透明、绑定会话、每次使用都轮换的重用被取代的令牌会撤销整个令牌族。现有本地 JWT 刷新令牌与/identity/refresh-token端点保持原样。拒绝复用无状态 JWT 刷新端点因为它无法强制连接禁用、会话年龄、声明快照或撤销也拒绝把完整代理状态放进受保护浏览器值因为一次性消费与服务端撤销会变弱。仓库中对应的生命周期选项在 ExternalAuthenticationOptions.cs 的ExternalAuthenticationLifetimesOptionsBrokerTransactionLifetime10 分钟、CompletionCodeLifetime1 分钟、PreviewLifetime10 分钟等中有直接体现。6. 令牌签发重构Token Issuance Refactoring为避免环境会话状态并保持既有公共 Identity 契约稳定设计把DefaultAccessTokenIssuer中JWT 构造部分抽取为共享令牌签发服务public sealed record TokenIssuanceContext( User User, IReadOnlyCollectionstring Roles, IReadOnlyCollectionstring Permissions, IReadOnlyCollectionClaim AdditionalClaims, string? ExternalAuthenticationSessionId); public interface IElsaTokenService { ValueTaskIssuedAccessToken IssueAccessTokenAsync( TokenIssuanceContext context, CancellationToken cancellationToken default); }IAccessTokenIssuer.IssueTokensAsync(User)签名不变本地行为委托给共享服务。外部签发读取 Elsa User 的当前 Roles外部认证从不直接提供权限字符串——这是外部身份不是 Elsa 授权原则的落地。备选方案给IAccessTokenIssuer加破坏性参数、在新模块中复制令牌创建分别因 Elsa 作为可嵌入库的公共 API 兼容要求、以及签名与声明约定漂移风险而被否决。7. OpenID Connect 适配器OpenID Connect Adapter适配器基于Microsoft IdentityModel 的 OpenID Connect 协议原语实现而不是为每个连接动态注册 ASP.NET Core 认证 scheme。它负责精确发现、授权请求构造、代码交换、ID 令牌校验、可选 user-info 获取、声明投影、测试、预览与 Elsa 发起的上游登出。安全要求对齐 OpenID Connect Core 1.0 与 OAuth 2.0 Security BCP仅授权码流程authorization-code flow。精确提供方回调 URI。state/correlation 与 nonce 校验。签名、issuer、audience/authorized-party、lifetime、subject 校验。机密上游客户端 强制 S256 PKCE。支持client_secret_basic与client_secret_post。无隐式流、无密码授权。通过绑定并校验 issuer 实现 mix-up 防护。归一化身份创建后丢弃刷新/提供方令牌除非配置的 user-info 获取需要瞬态使用。拒绝动态注册 scheme 与从零自建 JWT 校验原语的原因分别是运行时增删、逐租户解析、版本绑定、草稿预览会变得复杂且 handler 特定以及应优先使用受维护的 IdentityModel 校验。源码印证在 OpenIdConnectExternalAuthenticationAdapter.cs 中适配器常量AdapterType openid-connect其CreateAuthorizationRequestAsync构造的授权请求包含response_typecode、client_id、redirect_uri由GetCallbackUri派生、state、nonce、code_challenge与code_challenge_methodS256与文档描述完全一致描述符将clientSecret标记为必需 Secret Binding 字段、mode提供discovery/manual两种信任模式signingKeys标记为不安全字段isUnsafetrue。8. 认证客户端与代理端点Authentication Clients and Broker EndpointsAuthentication Client 是部署配置与 Elsa API Applications 相互独立机密客户端用 Secret Binding 做客户端认证公共客户端无密钥两者都要求 S256 PKCE 与精确的回调/登出 URI 注册。代理端点为 OAuth 形状、位于/external-authentication下但保持 Elsa 特性化登录方式发现Login Method discovery。外部与本地代理发起external / local broker initiation。每个不可变 Connection Key 的固定提供方回调。授权码与外部刷新交换。会话登出与可选上游登出回调。否决复用 ApplicationAPI Applications 携带角色/权限、代表机器/API 凭据与从提供方回调直接返回 Elsa 令牌令牌会穿过浏览器重定向两种方案。REST 契约细节见 rest-api.md示例——发起外部登录GET /external-authentication/authorize/{connectionKey} ?client_idelsa-studio-wasm redirect_urihttps%3A%2F%2Fstudio.example%2Fauthentication%2Fexternal%2Fcallback response_typecode code_challenge{base64url} code_challenge_methodS256 return_path%2Fworkflows成功返回302到提供方return_path只存在于服务端持有的受保护状态中绝不转发给提供方。令牌交换端点返回{ accessToken: {elsa-jwt}, tokenType: Bearer, expiresIn: 3600, refreshToken: {opaque}, refreshExpiresIn: 7200, externalSessionExpiresIn: 28800 }完成码无论交换成功与否都在校验后原子消费重放返回400 invalid_request。刷新令牌每次响应都轮换被取代令牌的重用会撤销外部会话并返回401 access_denied。9. Studio 托管形态Studio Hosting Profiles两种 Studio 宿主拥有不同的信任边界因此采用不同客户端模型形态客户端代码交换/回调所有者浏览器/会话结果Studio Server机密服务端客户端BFF 风格Studio 服务端宿主拥有回调并以 PKCE 服务端持有客户端认证交换提供方与 Elsa 刷新凭据留在服务端浏览器只得到安全、HTTP-only 的 Studio 会话 CookieStudio WebAssembly公共浏览器客户端浏览器回调直接以 PKCE 交换不签发也不接受客户端密钥Elsa 凭据由 Studio token accessor 处理绝不进入 URL默认仅内存存储关键安全细节Server 端 CookieElsaStudio.ExternalAuthenticationHttpOnlytrue、SecureAlways、SameSiteLax、需要反伪造保护、Cookie 生命周期不得超过外部会话。WebAssembly 端令牌端点只允许精确注册的 origin无通配符、无带凭据的 CORS强制 S256 PKCE返回轮换刷新令牌交换前事务使用sessionStorage在提供方重定向后存活、回调后被删除交换后凭据默认留在内存持久化策略为显式可配置并带警告。部署在四种认证提供方中选择一个ElsaIdentity、ElsaLogin旧版、OpenIdConnect直接、ExternalAuthentication代理管理模块可独立安装。同时启用 Direct OIDC 与 Brokered 模式是启动配置错误。被否决的方案Server 用公共浏览器流BFF 可避免令牌暴露给浏览器代码、独立 WebAssembly 强制 BFF受支持的静态宿主部署没有 Studio 侧服务端组件。10. 本地凭据与无凭据用户Local Credentials and Credential-less Users最简兼容模型变更User.HashedPassword与User.HashedPasswordSalt变为可空兼容的首次迁移两个字段要么都存在要么都不存在。DefaultUserCredentialsValidator在任一字段缺失时返回相同的无效结果。现有/identity/login与/identity/refresh-token契约不变。新增代理本地发起端点通过现有服务校验凭据返回与外部认证相同的完成码交接未链接/无效密码/未知用户/无本地凭据统一返回401 authentication_failed避免账户枚举。JIT 使用从租户与链接身份派生的内部抗碰撞用户名 随机后缀提供方邮箱与显示名只是可选档案输入永远不是身份键全局用户名唯一性规则保留。备选方案立即抽出新表、改用户名为租户作用域唯一分别因可空密码字段即可满足 v1 而无需迁移每个本地用户与应作为独立 Identity 迁移而被推迟。11. 身份链接与未链接策略Identity Links and Unlinked PoliciesExternal Identity Link 单独持久化唯一身份元组为(targetTenantId, connectionKey, issuer, subject)。内置策略为Reject与CreateUser选择按连接进行部署提供默认值与白名单。管理员预链接复用与 JIT 相同的原子链接服务终端用户自助链接不在 v1 范围。独立链接让提供方身份与 Elsa 授权分离一个 Elsa User 可以拥有多个外部身份。数据模型细节data-model.md链接表以SubjectHash键控哈希存储 subject只保留可选的SubjectHint掩码提示绝非原始 subject唯一索引为(TenantId, ConnectionKey, Issuer, SubjectHash)外键指向同租户 User归档连接保留链接并发 JIT 与预链接使用同一个原子 create-link-or-get-existing 操作。12. 用户匹配、角色供给与权限组合User Matching, Role Provisioning, and Permission Compositionmatcher 型未链接身份策略选择一个已部署的IExternalUserMatchermatcher 声明所需归一化 claims策略临时供给它们求值后丢弃、不持久化。单匹配提议现有用户无匹配按配置的Reject/CreateUser回退歧义/错误结果拒绝。v1不内置Elsa 第一方 verified-email matcher邮箱/姓名隐式匹配默认不可用。defaultRoleIds是静态的只应用于 CreateUser/无匹配回退新建的用户保存时复用 Elsa 角色分配授权检查角色与 User 存储写入同批提交在独立持久化的链接变得持久之前不签发凭据。匹配到的/现有用户不会被修改角色v1 Studio 不提供 claim→role 或 claim→permission 映射 UI。角色删除受到依赖保护任何数据库或配置拥有的 CreateUser / matcher no-match CreateUser 的defaultRoleIds引用含禁用、归档、遮蔽、当前无效的定义都会阻止普通删除配置引用返回脱敏配置路径且绝不自动改写部署配置授权修复命令需多重确认先移除可编辑引用再删除角色部分失败时角色保持完好且可安全重试。运行时契约中的决策记录见 runtime-contracts.mdpublic abstract record UnlinkedIdentityDecision { public sealed record Reject(string SafeReason) : UnlinkedIdentityDecision; public sealed record CreateUser(UserCreationProposal Proposal) : UnlinkedIdentityDecision; public sealed record LinkExistingUser(string UserId, string AuthorizationBasis) : UnlinkedIdentityDecision; }内置策略类型为reject、create-user、match-external-user对应仓库中的 RejectUnlinkedIdentityPolicy.cs、CreateUserUnlinkedIdentityPolicy.cs、MatchExternalUserUnlinkedIdentityPolicy.cs。13. 秘密绑定Secret Bindings协议中立模块定义ISecretBindingResolver返回值加不可逆的生成指纹generation fingerprintpublic interface ISecretBindingResolver { string Type { get; } ValueTaskSecretBindingState GetStateAsync(SecretBinding binding, CancellationToken cancellationToken default); ValueTaskResolvedSecretBinding ResolveAsync(SecretBinding binding, CancellationToken cancellationToken default); } public sealed record ResolvedSecretBinding(SensitiveString Value, string GenerationFingerprint);SensitiveString刻意避免有意义的ToString()输出并在可行处处置/清除。Elsa Secrets 解析器Elsa.ExternalAuthentication.Secrets包不可变秘密名 最新激活版本。配置解析器按配置键解析提供方无法提供版本时代理从解析值派生键控指纹。绑定声明Managed或External只有 Managed 值在 Studio 中有替换/移除生命周期操作External 值只暴露引用与配置/可解析状态。指纹参与有效物料修订material revision但永不返回、记录或作为公共连接数据持久化。之所以所有解析器都要有等价轮换语义是为了让回调修订检查不依赖提供方特定的版本特性。仓库实现见 ElsaSecretBindingResolver.cs 与 ConfigurationSecretBindingResolver.cs。14. 提供方 HTTP 安全Provider HTTP Safety对外 HTTP 使用专用命名HttpClient管道 目标校验器覆盖发现、令牌、user-info、测试、预览与登出请求。安全默认值默认要求 HTTPSHTTP 仅通过显式开发/不安全策略允许。每次 DNS 解析后拒绝私有、环回、链路本地、组播、保留与未指定地址。每个重定向目标都重新解析 DNS重定向限制为 3 次且不得降级 HTTPS。连接/请求超时10 秒。发现/JWKS 响应上限各 1 MiB令牌/user-info 上限各 256 KiB。可选部署白名单与出口代理优先于连接设置。响应体永不进入公共错误、预览、健康详情、日志或通知。原因是运行时配置的权威端点使发现与测试端点天然具备 SSRF 能力因此出站策略必须是一等安全边界。仓库中的实现与校验器包括 ProviderHttpClientFactory.cs、ValidatedOutboundConnectionFactory.cs 与 OutboundDestinationValidator.cs。15. 速率限制与公共错误Rate Limiting and Public Errors与 ASP.NET Core命名速率限制策略集成提供可替换的安全参考默认值端点族默认分区默认限制发现discoveryclient ID 远端网络60 请求/分钟外部发起client ID 远端网络20 请求/分钟本地发起client ID 远端网络 键控用户名哈希10 请求/分钟提供方回调Connection ID 远端网络60 请求/分钟代码/刷新交换client ID 远端网络30 请求/分钟429响应包含Retry-After与安全的rate_limited类别。其他公共错误类别invalid_request、method_unavailable、authentication_failed、identity_unlinked、flow_expired、flow_changed、access_denied、temporarily_unavailable、server_error每条都带关联标识符correlation ID。管理 API 可额外使用not_found、validation_failed、conflict、forbidden、precondition_failed。统一错误响应示例rest-api.md{ error: flow_expired, message: The sign-in attempt expired. Start again., correlationId: 01JZ... }公共错误不得区分未知用户与缺失链接防止账户枚举。仓库中的速率限制策略名定义于 ExternalAuthenticationRateLimitPolicyNames.cs。16. 连接测试与预览Connection Testing and Preview连接测试只在共享存储中按 Connection ID 与已测试物料修订键控保存最新脱敏ConnectionObservation物料修订变化即过期不做历史与轮询。测试失败不会自动禁用或隐藏有效的已启用连接——启用意图、结构有效性、观察结果三者严格分离。预览Preview Sign-in使用独立的 client/callback purpose 与原子状态/结果记录。结果白名单包含 issuer、subject 哈希或掩码 subject、选中的投影 claims带描述符脱敏、目标租户、提议的策略决策、提议的用户/链接动作、带来源的权限授予与警告不可兑换为正常会话绝不创建用户、链接、普通完成码、凭据或会话。数据模型见>services.AddElsa(elsa { elsa.UseIdentity(identity { /* existing token options */ }); elsa.UseExternalAuthentication(external { external.Configure(options configuration.GetSection(ExternalAuthentication).BindExternalAuthenticationOptions(options)); external.UseOpenIdConnect(); external.UseElsaSecrets(); }); });配置优先的宿主省略数据库存储注册使用 EF Identity 持久化的宿主将外部认证 EF 集成注册到同一IdentityElsaDbContext。关键部署配置项ExternalAuthenticationOptions.csAuthenticationClients认证客户端、Connections不可变配置自有连接、EnableDatabaseConnections可选数据库来源、AllowConfigurationConnectionOverrides是否允许数据库覆盖配置键、AllowedAdapterTypes/AllowedUnlinkedIdentityPolicyTypes扩展白名单未链接策略默认仅[reject, create-user]、UnlinkedIdentityPolicy.DefaultType默认reject、Lifetimes、Claims、RateLimits、ProviderEgress、Redirects等。自定义扩展通过 DI 与显式特性方法注册external.AddAdapterMyGitHubAdapter()、external.AddUnlinkedIdentityPolicyMyAdmissionPolicy()等扩展代码是可信部署代码运行时设置只能选择已注册且部署允许的类型。Studio 宿主通过Authentication:Provider选择认证模式ElsaIdentity/OpenIdConnect/ElsaLogin/ExternalAuthentication代理模式为显式选择Server 默认保持ElsaIdentityWebAssembly 默认保持OpenIdConnect。结语从研究文档的 18 个决策章节可以看到Elsa 外部认证的 v1 设计把安全默认、显式放宽、不变式不可编辑贯穿始终配置优先 完整覆盖不合并、主机级管理 不可变 Connection Key、原子一次性句柄 会话绑定刷新轮换、精确发现 可门控的信任覆盖、独立链接 权限只经 Elsa Roles 派生。它与仓库中 Elsa.ExternalAuthentication 各模块的源码结构、REST 契约、运行时契约、Studio 契约 与 数据模型 完全对应可直接作为集成、二次开发与安全评审的参考基线。赞分享后端工作流自动化流程编排低代码【免费下载链接】elsa-coreThe Workflow Engine for .NET项目地址https://gitcode.com/gh_mirrors/el/elsa-core点击查看免费下载相关推荐Elsa 3 外部认证External Authentication实现方案服务器托管的身份提供方连接 Broker 架构详解Elsa 3 外部认证External Authentication实现方案服务器托管的身份提供方连接 Broker 架构详解 导读 本文基于 specs后端工作流自动化流程编排低代码Elsa 3 外部认证External Authentication与身份提供方连接服务器自有 Broker 的架构、配置与实战指南Elsa 3 外部认证External Authentication与身份提供方连接服务器自有 Broker 的架构、配置与实战指南 Elsa 3 通过后端工作流自动化流程编排低代码Elsa External Authentication REST API 契约详解Broker 登录、连接管理与外部身份链接的完整实现Elsa External Authentication REST API 契约详解Broker 登录、连接管理与外部身份链接的完整实现 本篇技术指南以 El后端工作流自动化流程编排低代码上一篇如何用 SteamAutoCrack 三步完成游戏免平台启动离线游玩完整指南下一篇RT-Thread 在 JuiceVm RISC-V 64 位虚拟机上的 BSP 移植与运行指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表