使用具有 ASP.NET Core Identity 的 IdentityServer 4 的附加价值是什么?

What's the added value of using IdentityServer 4 with ASP.NET Core Identity?

TL;DR - 标题:)

背景故事: 我正在构建一组应用程序(包括 RESTful API 和几个客户端 - 纯网络应用程序和移动应用程序)。 所有核心 API 都将在 ASP.NET Core 中编写。 我想解决 authentication-authorization 问题。

我不想使用云或外部服务,因为关闭所有用户相关数据对我来说是重中之重(包括密码)。

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

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

我的问题分为两部分:

  1. ASP.NET 核心身份和 IdentityServer 4 之间有什么?
    IdentityServer 4 是否提供了 ASP.NET Identity 提供的一些(不同的)具体抽象?
    我想知道 ASP.NET Identity 和 IdentityServer 4.
  2. 之间的关系
  3. 使用 IdentityServer 4 进行开发的成本是多少?是 straight-forward,还是实现起来并不简单?
  4. 一个额外的问题 :) - 还有其他选择吗?你会选择什么?为什么?

有一个很好的答案,它回答了我的很多问题,但我仍然想要一个针对我的问题的答案。

提前致谢!

好吧,如果现在还不明显的话:你不能用 ASP.NET 核心身份创建 jwt/bearer 代币。

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

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

因此,如果有人通过窃听流量获得不记名令牌,则该令牌仅在短时间内有效,攻击者在没有 id 令牌的情况下无法刷新它。

其次,cookie 在安全堆栈交换中更容易受到 XSS, whereas bearer token are sent per request and are only vulnerable to XSRF, which can be more easily be protected via AntiForgery tokens. See also this answer 的攻击。