.NET Framework 4.8.1下开发OIDC身份提供商的最简方案
我们需要集成SSO功能,让已登录本系统的用户登录第三方Web托管提供商。该提供商要求通过OIDC实现SSO,且期望我方作为身份提供商(IdP)。我方已支持Google、Microsoft、Okta用户登录本系统,了解OIDC,但此前仅实现「第三方IdP→我方」的对接,未做过「我方作为IdP→第三方」的场景。
我方系统已有20多年历史,多数用户存储于OIDC出现前的自定义凭证库,本身并非IdP,且仅支持.NET Framework 4.8.1(不支持Core/5+)。第三方要求提供:
- 客户端ID(无问题)
- 客户端密钥(无问题)
- 配置URL/知名OIDC端点(存在问题,需内部配套多个端点)
我看到2012年的相关帖子,场景与我方一致,但DotNetOpenAuth仓库自2019年起已归档;IdentityServer3是支持.NET Framework的最新版本,但自2018年起未更新。请问是否有仍在维护的.NET Framework(非Core/5+)库可用于实现OIDC IdP?
.NET Framework生态下,专门面向OIDC IdP场景且仍在官方维护的库确实非常有限——主流身份认证框架早已转向.NET Core/.NET 5+生态。针对你的场景,有以下几个可行方案:
1. 基于IdentityServer3做自定义维护
虽然IdentityServer3官方停更,但它是成熟稳定的OIDC IdP实现,完全适配.NET Framework,能覆盖第三方要求的所有核心端点(配置、授权、令牌、用户信息等)。你可以基于现有代码fork分支,自行维护必要的安全补丁和适配需求,这是最贴近现有技术栈的方案,无需大幅重构。
2. 手动实现核心OIDC端点
如果不想依赖停更的第三方库,可以利用微软官方维护的System.IdentityModel.Tokens.Jwt组件(支持.NET Framework 4.6.1+,已包含在.NET Framework 4.8.1中)手动实现OIDC核心端点:
- 配置端点(
.well-known/openid-configuration):返回符合OIDC规范的JSON结构,包含各端点地址、支持的签名算法、令牌有效期等信息 - 授权端点:验证当前系统的用户登录状态,生成并返回授权码(需处理
response_type、client_id等参数验证) - 令牌端点:验证授权码与客户端凭证,签发JWT格式的ID Token和Access Token
- 用户信息端点:根据Access Token解析用户身份,从自定义凭证库获取用户信息并返回
这种方式灵活性最高,能完全适配自定义用户存储,且依赖的组件由微软官方维护,安全有保障。
3. 新增.NET Core中间层(可选)
如果允许新增额外服务,可以搭建轻量的.NET Core/.NET 6+服务,使用仍在维护的Duende IdentityServer(原IdentityServer4商业化版本)或IdentityServer4社区版作为中间IdP。主系统通过API将已登录用户的身份信息传递给中间层,由中间层完成OIDC协议交互。这种方案无需改动主系统的.NET Framework代码,但需要额外部署和维护服务。
内容的提问来源于stack exchange,提问作者Jordan Rieger

