如何为asp.net mvc和web API实现相同的认证机制

本文关键字:实现 机制 认证 API web asp net mvc | 更新日期: 2023-09-27 17:55:02

目标是创建一个可以被本地移动设备(ios, android, win phone)以及具有各种表示层的web应用程序(asp.net core MVC, angular)共享的api。

计划使用asp.net核心web api来实现将被移动客户端和javascript客户端使用的REST api。我的问题是,因为其他表示层,如asp.net MVC将使用理想的安全逻辑应该放在哪里?如果我们在REST api中添加检查,那么asp.net MVC应用程序控制器将不得不使用HttpClient调用REST web api,而不仅仅是引用业务层(共享类库)。

每个应用程序的身份验证将由json web令牌处理,因为它们是移动友好的,可以轻松扩展。我的问题是关于授权安全性和它在哪里。

选项1:

web API(安全在此)>业务/服务层>数据访问层>数据层

选项2:Web API>业务/服务层(此处安全)>数据访问层>数据层

在选项1中,这对于移动和客户端前端来说是很好的,因为它们必须调用REST api,但是asp.net核心MVC必须使用HttpClient来调用REST api,而不是调用组成业务/服务层的共享类库。

在选项2中,所有REST api负责的是调用到业务/服务层,在那里处理安全性。

如何为asp.net mvc和web API实现相同的认证机制

听起来你的目标是构建一个公共API。这应该是独立的,并自行处理安全- MVC网站只是另一个客户端(可能碰巧生活在相同的解决方案),但理想情况下,你不应该有太多的引用它们之间(基本上只是API契约)。这样,你也可以更早地捕捉到向后兼容性问题,而不是MVC站点总是以强类型的方式工作(即使通过重构),而其他(尤其是移动客户端)则不会——你将不得不求助于API的版本控制。

如果你在服务器端采取某些措施(例如缓存),性能真的不应该是一个问题,有大量的api以这种方式工作。