我正在尝试将我们的解决方案之一从Laravel / PHP系统迁移到基于.Net Core 2的系统。我的主要问题是关于授权和认证。
我有5种不同的应用程序将REST查询发送到Api(例如,Web浏览器,iOS应用程序,Android应用程序等),而我目前处理身份验证/授权的方式如下:
似乎在Core 2中,令牌的预期用途是通过JWT。我对这种方法不是100%满意的,因为我希望用户能够看到为其访问生成的所有令牌,所有关联的权限以及简单地撤消对令牌的访问的能力。而对于JWT,只有在他们通过请求发送令牌的情况下,才知道谁拥有令牌。
我当前的实现可以生成任何随机令牌,只要它在数据库中是唯一的即可;不需要任何加密算法。
在Core 2中复制上述系统的最佳方法是什么?
我发现Microsoft的方法非常适合简单的应用程序,但是我正在努力重写Authorize Attribute并获得我希望的粒度。
答案 0 :(得分:1)
我发现Microsoft的方法非常适合简单的应用程序,但是我正在努力重写Authorize Attribute并获得我希望的粒度。
那是完全相反的。微软没有发明也没有接近第一个开始使用JWT的人。您已经采用了一些非常普遍的方法并制作了自己的版本,而这种方法不被认为是安全的,也不是一种好的做法。
有两种方法可以解决当前的问题:
使用Identity Server 4,这是一个由ASP.NET Core开发的免费开源系统,由经验丰富的安全人员开发,它为您提供可自定义的OAuth 2.0 / OpenID Connect系统。这样,您就需要对应用程序安全性的某些部分进行重做,但是您将使用行业标准。
注意:这可能不太容易,但是扩展性非常好
身份服务器已经为您提供了有关每个应用程序的所有信息,以及哪些令牌对哪些应用程序有效。
虽然您可以手工完成此操作,但又不会遇到太多麻烦,但我建议您看一下ASP.NET Core Identity,这是ASP.NET Core中身份验证和授权的官方框架。注意,关于如何知道哪些令牌/登录处于活动状态,Identity最近采用了两个有趣的表:
所有这些,通常将ASP.NET Core Identity添加到Identity Server 4应用程序中,因为后者不用于处理授权。