将IdentityServer 4与ASP.NET Core Identity一起使用有什么附加价值?

Dot*_*rog 4 authentication oauth-2.0 asp.net-core identityserver4 asp.net-core-identity

TL; DR - 标题:)

背景故事: 我正在构建一组应用程序(包括RESTful API和几个客户端 - 纯Web应用程序和移动应用程序).所有的核心API都将被写入ASP.NET Core.我想解决身份验证授权问题.

我不想使用云或外部服务,因为保持所有用户相关数据关闭是我的首要任务(包括密码).

根据我的阅读,似乎ASP.NET Core Identity提供了与所需的身份验证和授权相关的所有功能和流程.我可以管理整个用户群,包括散列密码,以及我自己与用户相关的所有数据.它是抽象和混凝土的集合(如果需要,我可以扩展).

我还读到我可以整合IdentityServer 4.从我的理解,它给了我额外的安全层,我可以将其用作安全令牌服务(STS),并为我提供OAuth 2.0授权和OpenID身份验证的实现,这很棒,但是...是吗?我只是想了解使用它的好处是什么.

我的问题有两个部分:

  1. ASP.NET核心身份和IdentityServer 4之间有什么关系?
    IdentityServer 4是否提供ASP.NET身份提供的抽象的一些(不同的)混凝土?
    我想知道ASP.NET Identity和IdentityServer 4之间的关系.
  2. 使用IdentityServer 4进行开发的成本是多少?它是直截了当的,还是实现起来并不简单?
  3. 奖金问题:) - 那里有其他选择吗?你会选择什么?为什么?

以下问题有一个很好的答案,它回答了我的很多问题,但我仍然想要一个特定于我的问题的答案.

提前致谢!

Tse*_*eng 7

好吧,如果现在不明显:你不能用ASP.NET核心身份创建jwt/bearer令牌.

ASP.NET Core Identity使用cookie中间件,它有一些缺点.使用授权中间件可以使用bearer/jwt令牌,但是您无法创建自己的令牌.这就是ASOS和Identity4缩小差距的地方.

使用cookie有几个缺点,包括它通常很长时间,而JWT令牌通常有短暂的生命周期(5到10分钟),并通过身份令牌刷新.

因此,如果有人通过窃听流量获得承载令牌,则令牌仅在短时间内有效,并且攻击者无法在没有id令牌的情况下刷新它.

其次,cookie更容易受到XSS的攻击,而持有者令牌是按请求发送的,只容易受到XSRF的攻击,而XSRF可以通过AntiForgery令牌更容易保护.另见安全堆栈交换的答案.