TL; DR - 标题:)
背景故事:
我正在构建一组应用程序(包括RESTful API和几个客户端 - 纯Web应用程序和移动应用程序)。
所有核心API都将用ASP.NET Core
编写。
我想解决身份验证授权问题。
我不想使用云或外部服务,因为保持关闭所有用户相关数据是我的首要任务(包括密码)。
根据我的阅读,似乎ASP.NET Core Identity
提供了与所需的身份验证和授权相关的所有功能和流程。我可以管理整个用户群,包括散列密码,以及我自己与用户相关的所有数据。它是抽象和混凝土的集合(如果需要,我可以扩展)。
我还读到我可以与IdentityServer 4
集成。根据我的理解,它给了我额外的安全层,我可以将其用作安全令牌服务(STS)并为我提供OAuth 2.0授权和OpenID身份验证的实现,这很棒,但是...是吗?我只是想了解使用它的好处是什么。
我的问题分为两部分:
the following question有一个很好的答案,它回答了我的很多问题,但我仍然想要一个特定于我的问题的答案。
提前致谢!
答案 0 :(得分:7)
好吧,如果现在不明显:你不能使用ASP.NET Core Identity创建jwt / bearer令牌。
ASP.NET Core Identity使用cookie中间件,它有一些缺点。使用授权中间件可以使用bearer / jwt令牌,但是您无法创建自己的令牌。这就是ASOS& Identity4缩小了差距。
使用cookies有几个缺点,包括它通常很长时间,而JWT令牌通常有短暂的生命周期(5到10分钟),并通过身份令牌刷新。
因此,如果某人通过窃听流量获取了承载令牌,则该令牌仅在短时间内有效,并且攻击者无法在没有ID令牌的情况下刷新它。
其次,cookie更容易受到XSS的影响,而持有者令牌是按请求发送的,并且只容易受到XSRF的攻击,而XSRF可以通过AntiForgery令牌更容易受到保护。另请参阅安全堆栈交换中的此answer。