问题 IdentityServer4与AspNet.Security.OpenIdConnect.Server对比OpenIddict


为了理解我可以用于OpenId Connect Server实现的内容,我已经研究了它们各自的含义:

  • IdentityServer4

    ASP.NET Core 2的OpenID Connect和OAuth 2.0框架。

  • AspNet.Security.OpenIdConnect.Server

    是ASP.NET Core 1.x / 2.x和OWIN / Katana 3.x / 4.x的高级OAuth2 / OpenID Connect服务器框架,旨在提供低级别,协议优先的方法。

  • OpenIddict

    OpenIddict旨在提供一种简单易用的解决方案,以在任何ASP.NET Core 1.x或2.x应用程序中实现OpenID Connect服务器。

    OpenIddict基于 AspNet.Security.OpenIdConnect.Server 控制OpenID Connect身份验证流程,可以与任何成员资格堆栈一起使用,包括ASP.NET核心身份。

  • 还检查了所有这些都使用得很好 ASP.NET核心身份 作为会员制度。

所以我目前的理解是这样的 IdentityServer4 和 OpenIdConnect.Server 是解决同一问题的两个替代框架。主要区别在于受支持的ASP.NET Core版本列表。

关于 Openiddict  - 它是一种基于简化服务器创建的扩展 AspNet.Security.OpenIdConnect.Server

我错过了什么,或者这是一般的事情吗?


3260
2017-10-06 15:14


起源



答案:


所以我目前的理解是IdentityServer4和OpenIdConnect.Server是两个解决相同问题的替代框架。主要区别在于受支持的ASP.NET Core版本列表。

实际上,我认为最重要的区别在于 这两个库不共享相同的目标。 ASOS的唯一任务是帮助您处理原始的OAuth2 / OIDC协议细节:其他一切都完全超出范围。具体来说,这意味着您可以在OpenIddict和IdentityServer中找到的用户,应用程序或商店等概念在ASOS中完全不存在(这意味着您可以自由地实现自己的实现......以及您自己的抽象)。

虽然IdentityServer将公开许多允许配置特定功能的抽象和服务,但ASOS是从Katana分支出来的 OAuthAuthorizationServerMiddleware  - 具有集中的基于事件的低级API(命名为 OpenIdConnectServerProvider)其行为与MSFT开发的ASP.NET核心安全中间件完全相同。

使用ASOS时,您必须处理原始OpenID Connect请求并实施可能敏感的事情,例如客户端身份验证(例如,使用包含客户端凭据的数据库),这就是为什么ASOS的核心目标是了解OAuth2 / OIDC协议如何工作的人。另一方面,OpenIddict和IdentityServer将为您实现这些功能。

关于Openiddict - 它是一种基于AspNet.Security.OpenIdConnect.Server简化服务器创建的扩展。

最初,这确实是我被要求设计它的方式。 OpenIddict是为非专家创建的,他们对OAuth2和OpenID Connect的协议细节不太满意。

虽然它将为您提供实现用户身份验证部分的完全灵活性(例如,在您自己的授权控制器中,使用ASP.NET Core Identity或您自己的身份验证方法),但它将处理复杂的请求验证过程并使其对您的应用程序透明,没有淹没你的大量配置选项。

与ASOS(尽可能灵活且尽可能接近规范)不同,OpenIddict通常附带更严格的验证例程,我个人认为这是最佳实践。例如,它将自动拒绝包含的授权请求 response_type=token 如果客户端是机密应用程序,即使OpenID Connect规范未禁止该应用程序。


10
2017-10-10 20:42



你能告诉我为什么我应该在IdentityServer4上选择Openiddict吗? - graycrow
@graycrow很遗憾我不能这样做,因为StackOverflow上不允许“基于意见”的答案。为什么不试试IdSrv和OpenIddict并根据自己的感觉选择你喜欢的? - Pinpoint
@aaronR我的答案中有什么东西让你认为它没有? - Pinpoint
@Pinpoint这是一个由Set做出的声明,没有解决。 - aaronR
@aaronR好点。也就是说,我不认为这个陈述是由Set做出的,他可能只是简单地引用了文档,清楚地说明了这一点 IdentityServer4 is an OpenID Connect and OAuth 2.0 framework for ASP.NET Core 2 (docs.identityserver.io/en/release)。如果不是这样,那么修复无效文档会更好。 - Pinpoint


答案:


所以我目前的理解是IdentityServer4和OpenIdConnect.Server是两个解决相同问题的替代框架。主要区别在于受支持的ASP.NET Core版本列表。

实际上,我认为最重要的区别在于 这两个库不共享相同的目标。 ASOS的唯一任务是帮助您处理原始的OAuth2 / OIDC协议细节:其他一切都完全超出范围。具体来说,这意味着您可以在OpenIddict和IdentityServer中找到的用户,应用程序或商店等概念在ASOS中完全不存在(这意味着您可以自由地实现自己的实现......以及您自己的抽象)。

虽然IdentityServer将公开许多允许配置特定功能的抽象和服务,但ASOS是从Katana分支出来的 OAuthAuthorizationServerMiddleware  - 具有集中的基于事件的低级API(命名为 OpenIdConnectServerProvider)其行为与MSFT开发的ASP.NET核心安全中间件完全相同。

使用ASOS时,您必须处理原始OpenID Connect请求并实施可能敏感的事情,例如客户端身份验证(例如,使用包含客户端凭据的数据库),这就是为什么ASOS的核心目标是了解OAuth2 / OIDC协议如何工作的人。另一方面,OpenIddict和IdentityServer将为您实现这些功能。

关于Openiddict - 它是一种基于AspNet.Security.OpenIdConnect.Server简化服务器创建的扩展。

最初,这确实是我被要求设计它的方式。 OpenIddict是为非专家创建的,他们对OAuth2和OpenID Connect的协议细节不太满意。

虽然它将为您提供实现用户身份验证部分的完全灵活性(例如,在您自己的授权控制器中,使用ASP.NET Core Identity或您自己的身份验证方法),但它将处理复杂的请求验证过程并使其对您的应用程序透明,没有淹没你的大量配置选项。

与ASOS(尽可能灵活且尽可能接近规范)不同,OpenIddict通常附带更严格的验证例程,我个人认为这是最佳实践。例如,它将自动拒绝包含的授权请求 response_type=token 如果客户端是机密应用程序,即使OpenID Connect规范未禁止该应用程序。


10
2017-10-10 20:42



你能告诉我为什么我应该在IdentityServer4上选择Openiddict吗? - graycrow
@graycrow很遗憾我不能这样做,因为StackOverflow上不允许“基于意见”的答案。为什么不试试IdSrv和OpenIddict并根据自己的感觉选择你喜欢的? - Pinpoint
@aaronR我的答案中有什么东西让你认为它没有? - Pinpoint
@Pinpoint这是一个由Set做出的声明,没有解决。 - aaronR
@aaronR好点。也就是说,我不认为这个陈述是由Set做出的,他可能只是简单地引用了文档,清楚地说明了这一点 IdentityServer4 is an OpenID Connect and OAuth 2.0 framework for ASP.NET Core 2 (docs.identityserver.io/en/release)。如果不是这样,那么修复无效文档会更好。 - Pinpoint