Orchard Core OpenID Connect 模块实战指南:授权服务器、令牌验证与 OIDC 客户端集成
发布时间:2026/9/28 2:23:14来源:尧图网络
CMS后端Web框架【免费下载链接】OrchardCoreOrchard Core is an open-source modular and multi-tenant application framework built with ASP.NET Core, and a content management system (CMS) built on top of that framework.项目地址https://gitcode.com/gh_mirrors/or/OrchardCore点击查看免费下载OrchardCore.OpenId是 Orchard Core 内置的 OpenID Connect 功能模块它让 Orchard Core 既能充当符合 OpenID Connect 与 OAuth 2.0 标准的授权服务器身份提供方 IdP也能作为客户端接入外部身份提供方同时还提供令牌验证与管理界面能力。读完本文你将掌握该模块五大特性的职责划分、服务端/客户端/验证端三类配置项的完整含义、recipe 步骤的编写方法以及生产环境中签名证书的生成与部署要点。OpenId 模块与五大特性总览OrchardCore.OpenId模块在 Manifest.cs 中声明了五个可独立启用的功能特性它们之间有明确的依赖关系特性 ID名称说明依赖OrchardCore.OpenIdOpenID Connect Core Services提供支撑其他所有 OpenID Connect 特性的基础服务仅可被依赖启用EnabledByDependencyOnly true无OrchardCore.OpenId.ClientOpenID Connect Client Integration允许通过外部 OpenID Connect 授权服务器身份提供方认证用户Core、OrchardCore.Users.ExternalAuthenticationOrchardCore.OpenId.ManagementOpenID Connect Management UI在管理后台提供管理应用、Scope 与权限的界面CoreOrchardCore.OpenId.ServerOpenID Connect Authorization Server使 Orchard Core 充当授权服务器/身份提供方签发令牌Core、ManagementOrchardCore.OpenId.ValidationOpenID Connect Token Validation验证本地授权服务器或其他可信服务器签发的令牌Core特性常量定义在 OpenIdConstants.cs 的OpenIdConstants.Features中。从依赖结构可以看出要启用授权服务器管理 UI 会被一并启用而令牌验证与客户端集成均只依赖核心服务可以独立部署在单独租户上。OpenID Connect Core Services一切的基石该特性提供支撑其他所有 OpenID Connect 特性的基础服务涵盖安全通信、令牌处理与用户认证所必需的基础组件。从 Startup.cs 的Startup类可以看到它注册了 OpenIddict 核心服务以及 Orchard 自己的迁移、管理器和默认的 YesSql 存储services.AddOpenIddict() .AddCore(options { options.AddOrchardMigrations() .UseOrchardManagers() .UseYesSql(); });如源码注释所述默认的 YesSql 存储可以替换为其他数据库例如引用 OpenIddict.EntityFrameworkCore 包并在选项中注册。核心服务的实现分布在 OrchardCore.OpenId.Core 项目中包括应用、授权、Scope、令牌四类抽象管理器IOpenIdApplicationManager、IOpenIdAuthorizationManager、IOpenIdScopeManager、IOpenIdTokenManager对应的 YesSql 存储实现、索引与迁移以及IUserInfoClaimsProvider这类用于扩展 UserInfo 端点声明输出的钩子。OpenID Connect Management UI后台管理界面启用后会在 Orchard Core 管理后台新增OpenID Connect导航分组见 ManagementAdminMenu.cs支持管理 OpenID Connect 应用创建、编辑、删除定义与修改 Scope作用域配置应用权限允许的端点、流程与响应类型。对应的控制器分别为ApplicationController、ScopeController视图位于 Views 目录下前端脚本见 Assets/ts 中的application-create.ts、application-edit.ts等。应用与 Scope 的持久化通过OpenIdApplicationManager/OpenIdScopeManager与 YesSql 存储完成。OpenID Connect Authorization Server让 Orchard Core 成为身份提供方该特性使 Orchard Core 可作为集中式身份提供方允许外部应用认证用户并管理访问控制。其底层由开源库 OpenIddict 可以看到服务注册方式AddOpenIddict().AddServer()组合UseAspNetCore()、UseDataProtection()并注册了PersistStoresHandler用于持久化令牌与授权。两个重要的架构事实README 明确说明授权服务器会自行验证/connect/userinfo端点收到的访问令牌因此当前租户无需启用令牌验证特性要验证签发的令牌请启用OpenID Connect Token Validation特性。支持的认证流程授权服务器支持以下标准流程对应各 RFC/规范文档Authorization Code Flow授权码流程OpenID Connect Core 规范Implicit Flow隐式流程Hybrid Flow混合流程Client Credentials Grant客户端凭证授权RFC 6749Resource Owner Password Grant资源所有者密码授权RFC 6749。此外设置项中还包含 Refresh Token 流程与 PKCEProof Key for Code Exchange支持。服务器设置项详解服务器配置可通过管理后台的OpenID Connect设置菜单配置也可以通过 recipe 步骤配置。设置模型定义在 OpenIdServerSettings.cs核心设置项如下Token Format访问令牌格式两种取值——DataProtection默认格式使用 ASP.NET Core Data Protection 堆栈加密的非标准不透明令牌JsonWebToken使用带签名的标准 JWT 令牌。默认加密但可以关闭访问令牌加密以便第三方资源服务器直接使用 Orchard OpenID 服务器签发的 JWT。AuthorityOrchard 作为身份服务器使用的 URL即Issuer见 OpenIdServerConfiguration.cs 中的options.Issuer settings.Authority。Signing Certificate Store Location签名证书存储位置取值为CurrentUser/LocalMachine。Signing Certificate Store Name签名证书存储名称可取AddressBook/AuthRoot/CertificateAuthority/Disallowed/My/Root/TrustedPeople/TrustedPublisher。Signing Certificate Thumbprint签名证书指纹建议不要使用与 SSL 相同的证书。Encryption Certificate Store Location / Store Name / Thumbprint加密证书的存储位置、存储名称与指纹同样建议不要与 SSL 证书混用。Enable Token Endpoint启用令牌端点。Enable Authorization Endpoint启用授权端点。Enable Logout Endpoint启用登出端点。Enable User Info Endpoint启用用户信息端点。Allow Password Flow允许密码流程要求启用 Token EndpointRFC 6749 §1.3.3。Allow Client Credentials Flow允许客户端凭证流程要求启用 Token EndpointRFC 6749 §1.3.4。Allow Authorization Code Flow允许授权码流程要求启用 Authorization 与 Token EndpointOpenID Connect Core 规范 CodeFlowAuth。Allow Implicit Flow允许隐式流程要求启用 Authorization EndpointImplicitFlowAuth。Allow Refresh Token Flow允许使用刷新令牌刷新访问令牌可与密码流程、授权码流程、混合流程组合使用RefreshTokens。Require Proof Key for Code Exchange全局 PKCE 开关对所有已注册客户端生效无论应用设置页中的 Require PKCE 标志是否设置。服务器设置 Recipe 步骤示例以下是一个完整的OpenIdServerSettingsrecipe 步骤继承自原文档可直接用于部署场景{ name: OpenIdServerSettings, TestingModeEnabled: false, AccessTokenFormat: JsonWebToken, // JsonWebToken 或 DataProtection Authority: https://www.orchardproject.net, SigningCertificateStoreLocation: LocalMachine, // 更多信息StoreLocation 枚举文档 SigningCertificateStoreName: My, // 更多信息StoreName 枚举文档 SigningCertificateThumbprint: 27CCA66EF38EF46CD9022431FB1FF0F2DF5CA1D7, EncryptionCertificateStoreLocation: LocalMachine, EncryptionCertificateStoreName: My, EncryptionCertificateThumbprint: BC34460ABEA2D576EA68E8FFCFEEB3F45C94FB0F, EnableTokenEndpoint: true, EnableAuthorizationEndpoint: false, EnableIntrospectionEndpoint: false, EnableLogoutEndpoint: true, EnablePushedAuthorizationEndpoint: false, EnableRevocationEndpoint: false, EnableUserInfoEndpoint: true, AllowPasswordFlow: true, AllowClientCredentialsFlow: false, AllowAuthorizationCodeFlow: false, AllowRefreshTokenFlow: false, AllowImplicitFlow: false, RequireProofKeyForCodeExchange: false, RequirePushedAuthorizationRequests: false, RequireEndSessionConfirmation: true }使用通用 Settings Recipe 步骤配置服务器除专用步骤外所有 OpenID Connect 设置都可以通过通用的settingsrecipe 步骤配置。服务器设置如下{ steps: [ { name: settings, OpenIdServerSettings: { TestingModeEnabled: false, TokenFormat: JsonWebToken, Authority: https://www.example.com, AuthorizationEndpointPath: /connect/authorize, LogoutEndpointPath: /connect/logout, TokenEndpointPath: /connect/token, UserinfoEndpointPath: /connect/userinfo, IntrospectionEndpointPath: /connect/introspect, RevocationEndpointPath: /connect/revoke, EnableTokenEndpoint: true, EnableAuthorizationEndpoint: true, EnableLogoutEndpoint: true, EnableUserInfoEndpoint: true, EnableIntrospectionEndpoint: false, EnableRevocationEndpoint: false, AllowPasswordFlow: false, AllowClientCredentialsFlow: false, AllowAuthorizationCodeFlow: true, AllowRefreshTokenFlow: true, AllowImplicitFlow: false, AllowHybridFlow: false, RequireProofKeyForCodeExchange: true, RequireEndSessionConfirmation: true, UseRollingRefreshTokens: false, UseReferenceAccessTokens: false } } ] }各属性说明属性类型说明TestingModeEnabledBoolean是否启用测试模式使用临时签名/加密密钥TokenFormatString访问令牌格式取值DataProtection、JsonWebTokenAuthorityStringOrchard 作为身份服务器使用的权威 URLAuthorizationEndpointPathString授权端点路径LogoutEndpointPathString登出端点路径TokenEndpointPathString令牌端点路径UserinfoEndpointPathString用户信息端点路径IntrospectionEndpointPathString内省端点路径RevocationEndpointPathString吊销端点路径EnableTokenEndpointBoolean是否启用令牌端点EnableAuthorizationEndpointBoolean是否启用授权端点EnableLogoutEndpointBoolean是否启用登出端点EnableUserInfoEndpointBoolean是否启用用户信息端点EnableIntrospectionEndpointBoolean是否启用内省端点EnableRevocationEndpointBoolean是否启用吊销端点AllowPasswordFlowBoolean是否允许资源所有者密码流程AllowClientCredentialsFlowBoolean是否允许客户端凭证流程AllowAuthorizationCodeFlowBoolean是否允许授权码流程AllowRefreshTokenFlowBoolean是否允许刷新令牌流程AllowImplicitFlowBoolean是否允许隐式流程AllowHybridFlowBoolean是否允许混合流程RequireProofKeyForCodeExchangeBoolean是否对所有客户端强制 PKCERequireEndSessionConfirmationBoolean即使带有有效id_token_hint用户是否也必须确认登出默认为trueUseRollingRefreshTokensBoolean是否使用滚动刷新令牌UseReferenceAccessTokensBoolean是否使用引用型访问令牌端点路径会被 ServerStartup.ConfigureAsync 映射为具体的 MVC 路由如/connect/authorize→Access.Authorize、/connect/userinfo→UserInfo.Me。值得注意的细节是只有当服务器设置通过校验时这些路由与认证处理器才会被注册见GetServerSettingsAsync中对ValidateSettingsAsync的调用这也是 Startup.cs 中手动移除 OpenIddict 内置认证初始化器的原因——避免在设置无效时注册处理器导致运行时异常。OpenID Connect Client Integration应用配置OpenID Connect 应用既可以通过管理后台的OpenID Connect Apps菜单依赖 Management UI 特性配置也可以通过 recipe 步骤配置。应用配置项Id唯一标识符。Client Id应用的客户端标识客户端请求有效令牌时必须提供。Display Name与当前应用关联的显示名称。Type两种类型——Confidential机密型与令牌端点、吊销端点通信时必须发送客户端密钥保证只有合法客户端能交换授权码或获取刷新令牌Public公开型通信时无需使用客户端密钥。Client Secret与应用关联的密码配置为 Confidential 类型时必填。从 OpenIdApplicationSettings.cs 的实现可以看出当类型为 Public 时客户端密钥会被置空descriptor.ClientSecret null。Flows流程若全局 OpenID Connect 设置允许该流程应用也可启用对应流程Allow Password Flow要求启用 Token EndpointRFC 6749 §1.3.3Allow Client Credentials Flow要求启用 Token EndpointRFC 6749 §1.3.4Allow Authorization Code Flow要求启用 Authorization 与 Token EndpointCodeFlowAuthAllow Implicit Flow要求启用 Authorization EndpointImplicitFlowAuthAllow Refresh Token Flow允许使用刷新令牌刷新访问令牌可与密码流程、授权码流程、混合流程组合使用RefreshTokens。Normalized RoleNames仅在启用 Client Credentials Flow 时需要决定应用通过该流程认证后被分配的角色。Redirect Options仅在需要 Implicit Flow、Authorization Code Flow 或 Hybrid Flow 时需要Logout Redirect Uri登出回调 URLRedirect Uri回调 URL。Skip Consent设置用户登录后是否需要完成同意表单。Advanced Parameters允许设置随授权请求发送的附加参数默认参数由上述选项生成。Require PKCE为注册应用应用 PKCE请确保所用客户端库支持 PKCE。应用 Recipe 步骤示例{ name: openidapplication, ClientId: openidtest, DisplayName: Open Id Test, Type: Confidential, ClientSecret: MyPassword, EnableTokenEndpoint: true, EnableAuthorizationEndpoint: false, EnableLogoutEndpoint: true, EnableUserInfoEndpoint: true, AllowPasswordFlow: true, AllowClientCredentialsFlow: false, AllowAuthorizationCodeFlow: false, AllowRefreshTokenFlow: false, AllowImplicitFlow: false, RequireProofKeyForCodeExchange: false, RequirePushedAuthorizationRequests: false }Recipe 步骤由 Recipes/OpenIdApplicationStep.cs 处理。从源码可以观察到应用配置与 OpenIddict 权限模型之间的映射逻辑例如允许授权码/混合流程会添加GrantTypes.AuthorizationCode与Endpoints.Authorization权限公开型应用在隐式/混合流程下还会获得id_token token、token、code token等响应类型权限而机密型应用不会见 OpenIdApplicationSettings.cs。Scope 权限以scp:前缀形式写入权限集合。OpenID Connect Scopes 配置Scope 可以通过管理后台的OpenID Connect Scopes菜单依赖 Management UI 特性配置也可通过 recipe 步骤配置。属性说明NameScope 的唯一名称Display Name与当前 Scope 关联的显示名称Description描述该 Scope 在系统中的用途Tenants基于租户名称构建受众audienceAdditional resources基于提供的空格分隔字符串构建受众Scope Recipe 步骤示例{ name: OpenIdScope, Description: A scope to provide audience for remote clients, DisplayName: External Audience Scope, ScopeName: custom_scope, Resources: my_recipient }Recipe 步骤由 Recipes/OpenIdScopeStep.cs 处理Scope 数据持久化在OrchardCore.OpenId.Core的 YesSql 模型中OpenIdScope.cs。首次启用服务器特性时DefaultScopesMigration会注册默认 Scope见 Migrations/DefaultScopesMigration.cs。配置证书Windows / IIS 场景生产环境中授权服务器需要签名证书与可选加密证书。Windows / IIS 下可用多种工具生成签名证书。使用 IIS Server Manager控制有限进入 Server Certificates选择 Create Self-Signed Certificate。使用 PowerShell完全可控# 参见 New-SelfSignedCertificate 文档 New-SelfSignedCertificate -Subject connect.example.com -FriendlyName Example.com Signing Certificate -CertStoreLocation cert:\LocalMachine\My -KeySpec Signature -KeyUsage DigitalSignature -KeyUsageProperty Sign -TextExtension (2.5.29.37{text}1.3.6.1.5.5.7.3.1) -KeyExportPolicy NonExportable -KeyAlgorithm RSA -KeyLength 4096 -HashAlgorithm SHA256 -NotAfter (Get-Date).AddDays(825) -Provider Microsoft Enhanced RSA and AES Cryptographic Provider该片段必须以管理员身份运行。它生成一个 4096 位的签名证书存入机器存储LocalMachine\My并返回证书指纹——你需要将该指纹填入 OpenID Connect 设置 recipe或用它导出证书。请务必按你的实际需求修改此示例多节点环境的证书分发在多节点环境中建议先用-KeyExportPolicy Exportable创建证书然后通过 MMC 证书管理单元或 PowerShellExport-PfxCertificate将证书PFX导出到安全位置最后在每个节点上以不可导出的方式导入Import-PfxCertificate的默认行为# 在生成证书的机器上执行 $mypwd ConvertTo-SecureString -String MySecretPassword123 -Force -AsPlainText Export-PfxCertificate -FilePath C:\securelocation\connect.example.com.pfx cert:\localMachine\my\thumbprintfromnewselfsignedcertificate -Password $mypwd # 在目标节点上执行 $mypwd ConvertTo-SecureString -String MySecretPassword123 -Force -AsPlainText Import-PfxCertificate -FilePath C:\securelocation\connect.example.com.pfx cert:\localMachine\my -Password $mypwd重要为了让OrchardCore.OpenId模块使用证书密钥签名它需要对存储中的证书拥有Read访问权限。可通过多种方式授予MMC.exe添加证书管理单元计算机账户右键相关证书选择所有任务→管理私钥添加相关身份如 IIS AppPool\PoolName——Add → Advanced → Locations 选择 IIS 服务器机器名 → Find Now → 在搜索结果中选择iisServerMachineName\IIS_IUSRS仅示例→ OK在权限中勾选 Allow Read。WinHttpCertCfg.exe授予完全控制例如winhttpcertcfg -g -c LOCAL_MACHINE\My -s connect.example.com -a AppPoolIdentityName在 Azure 中使用证书若站点托管在 Azure按以下步骤使用证书将证书上传到 Azure 门户站点的 TLS/SSL settings 页面在 Azure 站点设置页面新增一项KeyWEBSITE_LOAD_CERTIFICATESValue[证书指纹]在CurrentUserMy证书存储中选择该证书。OpenID Connect Token Validation令牌验证该特性负责验证由 Orchard Core 自身授权服务器或其他可信服务器签发的令牌支持 JWT 与 OpenID Connect discovery确保跨分布式应用的令牌验证安全可靠。对应 ValidationStartup 中的AddOpenIddict().AddValidation()组合UseAspNetCore()、UseDataProtection()、UseSystemNetHttp()。两种验证方式验证 Orchard OpenID 服务器签发的令牌可将验证特性配置为透明地复用另一个已启用授权服务器特性的租户的服务器配置验证远程服务器签发的令牌适用于支持 JWT 与 OpenID Connect discovery 的远程服务器。验证设置项属性说明Authorization server tenant运行 OpenID Connect Server 的租户。若未选择则必须提供以下属性Authority签发令牌的远程 OpenID Connect 服务器地址Audience必须校验的令牌预期接收方验证设置 Recipe 步骤示例{ name: OpenIdValidationSettings, Audience: my_recipient, Authority: https://idp.domain.com }使用通用 Settings Recipe 步骤配置验证{ steps: [ { name: settings, OpenIdValidationSettings: { Audience: your-resource-server, Authority: https://idp.example.com, DisableTokenTypeValidation: false, Tenant: , MetadataAddress: } } ] }属性类型说明AudienceString令牌验证使用的受众AuthorityStringOpenID Connect discovery 的权威 URLDisableTokenTypeValidationBoolean是否禁用访问令牌类型验证TenantString用于本地服务器验证的 Orchard 租户MetadataAddressString覆盖元数据发现地址用于非标准提供方设置模型见 OpenIdValidationSettings.cs其中Tenant为空且Authority为空时验证服务会尝试使用Authorization server tenant指定租户的服务器配置Tenant属性即对应此配置。验证通过后OpenIdValidationConfiguration.cs 会将验证处理器注册到认证管线并配置 API 授权策略。OIDC Client对接外部身份提供方该特性对应 ClientStartup从外部 OpenID Connect 身份提供方认证用户。行为要点若站点允许新用户注册则本地用户与外部登录会被关联若收到 email 声明且找到本地用户则认证后外部登录会与该账户关联。OpenId 配置项配置可通过管理后台的OpenID Connect设置菜单或 recipe 步骤设置。设置模型见 OpenIdClientSettings.cs。Display NameIdP 的显示名称显示在登录表单中。Authority进行 OpenIdConnect 调用时使用的权威 URL。ClientId查询中的client_id部分。CallbackPath从身份提供方登出后用户代理返回的应用基路径内的请求路径对应post_logout_redirect_uri。SignedOut CallbackPath登出的回调端点默认为/signout-callback-oidc。SignedOut Redirect Uri应用从身份提供方登出后用户代理被重定向到的 URI在SignedOutCallbackPath被调用之后发生。Scopes除openid和profile之外的额外 Scope。Response Mode配置响应模式。若为fragment或query则只允许 Code Authentication Flow。Supported Flows选择一种 OIDC 流程Code Authentication Flow授权码流程Hybrid Authentication Flow混合流程使用code id_token响应类型使用code id_token token响应类型使用code token响应类型Implicit Authentication Flow隐式流程使用id_token响应类型使用id_token token响应类型。Client Secret用于 code 或 hybrid 这类机密流程。客户端设置 Recipe 步骤示例{ name: OpenIdClientSettings, Authority: http://localhost:44300/t1, DisplayName: Orchard (t1) IdP, ClientId: orchard_t2, CallbackPath: /signin-oidc, SignedOutCallbackPath: /signout-callback-oidc, Scopes: email phone, ResponseMode: form_post, ResponseType: code id_token, ClientSecret: secret }使用通用 Settings Recipe 步骤配置客户端{ steps: [ { name: settings, OpenIdClientSettings: { DisplayName: External Identity Provider, Authority: https://idp.example.com, ClientId: your-client-id, ClientSecret: your-client-secret, CallbackPath: /signin-oidc, SignedOutCallbackPath: /signout-callback-oidc, ResponseType: code, ResponseMode: form_post, Scopes: openid profile email } } ] }属性类型说明DisplayNameString外部身份提供方的显示名称AuthorityStringOpenID Connect 提供方的权威 URL。必填ClientIdString客户端标识。必填ClientSecretString客户端密钥CallbackPathString用户代理返回时的回调路径SignedOutCallbackPathString登出后的回调路径SignedOutRedirectUriString登出后重定向的 URIResponseTypeStringOAuth 2.0 响应类型取值code、id_token、id_token token、code id_token、code token、code id_token tokenResponseModeString响应模式取值form_post、fragment、queryScopesString请求的空格分隔 Scope 列表客户端配置由 OpenIdClientConfiguration.cs 转化为 ASP.NET Core 的OpenIdConnectOptions从而接入标准的 OpenID Connect 中间件处理登录流程。部署与运维补充要点部署步骤支持服务器与验证设置均提供部署步骤Deployment Step见 Deployment 目录下的OpenIdServerDeploymentSource/OpenIdValidationDeploymentSource可随部署计划在站点间迁移配置。速率限制启用OrchardCore.RateLimits时ServerRateLimitsStartupStartup.cs会为Access.Token路由POST配置基于 IP 的滑动窗口限流密码认证策略10 次/窗口用于防护令牌端点被暴力攻击。后台清理任务OpenIdBackgroundTaskTasks/OpenIdBackgroundTask.cs负责清理过期的授权与令牌记录保持存储数据量可控。角色联动OpenIdApplicationRoleRemovedEventHandler会在角色被删除时同步清理相关应用的 Normalized RoleNames 配置避免客户端凭证流程引用已删除的角色。以上所有配置与代码路径均可在当前仓库中直接查阅模块源码目录、核心抽象与存储目录、模块文档。建议在实际部署前先在开发环境以TestingModeEnabled: true验证流程再切换到真实证书配置并始终为令牌端点保留速率限制防护。赞分享CMS后端Web框架【免费下载链接】OrchardCoreOrchard Core is an open-source modular and multi-tenant application framework built with ASP.NET Core, and a content management system (CMS) built on top of that framework.项目地址https://gitcode.com/gh_mirrors/or/OrchardCore点击查看免费下载相关推荐SpacetimeDB 认证体系深度解析OIDC 令牌、SpacetimeAuth 托管服务与模块级授权实战SpacetimeDB 认证体系深度解析OIDC 令牌、SpacetimeAuth 托管服务与模块级授权实战 本指南以 docs/docs/00200 cor数据库关系型数据库后端Apache APISIX 的 openid-connect 插件OIDC 认证集成与 Token 校验实战指南Apache APISIX 的 openid connect 插件OIDC 认证集成与 Token 校验实战指南 导读 openid connect 是 Ap后端微服务云原生KubeSphere 中的 go-oidc 实践指南OpenID Connect 客户端接入、ID Token 验证与 OIDC 身份源配置KubeSphere 中的 go oidc 实践指南OpenID Connect 客户端接入、ID Token 验证与 OIDC 身份源配置 导读 go oi后端云原生容器编排微服务上一篇Flurl性能优化终极指南5个客户端缓存与连接复用最佳实践下一篇终极指南faceai换脸功能揭秘 - 基于Dlib的智能面部融合算法完全解析创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
网站建设高端定制企业官网