TL;DR - 标题:)
背景故事:我正在构建一组应用程序(包括RESTful API和几个客户端——纯Web应用程序和移动应用程序)。所有核心API都将用ASP.NETCore
编写。我想解决身份验证-授权问题。
我不想使用云或外部服务,因为关闭所有与用户相关的数据对我来说是重中之重(包括密码)。
从我读到的来看,似乎ASP.NETCore Identity
提供了与身份验证和授权相关的所有功能和流程。我可以自己管理整个用户群,包括散列密码,以及与用户相关的所有数据。这是抽象和具体的集合(如果需要,我可以扩展)。
我还读到我可以与IdentityServer 4
集成。据我了解,它为我提供了额外的安全层,我可以将其用作安全令牌服务 (STS),并为我提供了 OAuth 2.0 授权和 OpenID 身份验证的实施,这很棒,但是......是这样吗?我只是想了解使用它有什么好处。
我的问题有两部分:
下面的问题有一个非常好的答案,它回答了我的很多问题,但我仍然想要一个针对我的问题的答案。
提前谢谢!
好吧,如果现在还不明显的话:你不能用ASP.NET核心身份创建jwt/不记名令牌。
ASP.NET Core Identity使用cookie中间件,这有一些缺点。有了授权中间件,您可以使用bearer/jwt代币,但不能创建自己的代币。那就是ASOS
使用cookie有几个缺点,包括它通常寿命很长,而JWT令牌通常寿命很短(5到10分钟)并通过身份令牌进行刷新。
因此,如果有人通过窃听流量获得承载令牌,该令牌仅在短时间内有效,攻击者在没有id令牌的情况下无法刷新它。
其次,cookie更容易受到XSS的攻击,而承载令牌是按请求发送的,只受XSRF的攻击,XSRF可以更容易地通过反伪造令牌进行保护。另请参阅有关安全堆栈交换的回答。