如何为 asp.net mvc 和 web API 实现相同的身份验证机制
How to implement the same authentication mechanism for both the asp.net mvc and web API
目标是创建一个 api 可以由本地移动设备(ios、android、win phone)以及具有各种网络应用程序共享的表示层(asp.net 核心 MVC,angular)。
计划使用 asp.net 核心网络 api 实现移动客户端和 javascript 客户端将使用的 REST api。我的问题是,因为像 asp.net MVC 这样的其他表示层将用于理想情况下应该放置安全逻辑的地方吗?如果我们在 REST api 中添加检查,那么 asp.net MVC 应用程序控制器将不得不使用 HttpClient 调用 REST Web api 而不是仅仅引用业务层(共享 class 图书馆)。
每个应用程序的身份验证将由 json 网络令牌处理,因为它们对移动设备友好并且可以轻松扩展。所以我的问题实际上是关于授权安全及其所在的位置。
选项 1:
webapi(安全住在这里)>business/service层>数据访问层>数据层
选项 2:
web api > business/service 层(安全就在这里)> 数据访问层 > 数据层
在选项 1 中,这适用于移动和客户端前端,因为它们必须调用 REST api,但是 asp.net 核心 MVC 必须使用 HttpClient 来调用 REST api 而不是调用构成 buinsess/service 层的共享 class 库。
在选项 2 中,所有 REST api 负责调用 business/service 层,在那里处理安全性。
听起来您的目标是构建一个 Public API。这应该是独立的并自行处理安全性——MVC 网站只是另一个客户端(可能碰巧存在于同一个解决方案中),但理想情况下它们之间不应该有太多引用(基本上只是 API合同)。通过这种方式,您还可以更早地发现向后兼容性问题,而不是 MVC 站点始终以强类型方式工作(即使通过重构),而其他站点(尤其是移动客户端)则不会 - 您将拥有求助于 API.
的版本控制
如果您在服务器端采取某些措施(例如缓存),性能确实应该不是问题,有大量的 API 以这种方式工作。
目标是创建一个 api 可以由本地移动设备(ios、android、win phone)以及具有各种网络应用程序共享的表示层(asp.net 核心 MVC,angular)。
计划使用 asp.net 核心网络 api 实现移动客户端和 javascript 客户端将使用的 REST api。我的问题是,因为像 asp.net MVC 这样的其他表示层将用于理想情况下应该放置安全逻辑的地方吗?如果我们在 REST api 中添加检查,那么 asp.net MVC 应用程序控制器将不得不使用 HttpClient 调用 REST Web api 而不是仅仅引用业务层(共享 class 图书馆)。
每个应用程序的身份验证将由 json 网络令牌处理,因为它们对移动设备友好并且可以轻松扩展。所以我的问题实际上是关于授权安全及其所在的位置。
选项 1:
webapi(安全住在这里)>business/service层>数据访问层>数据层
选项 2: web api > business/service 层(安全就在这里)> 数据访问层 > 数据层
在选项 1 中,这适用于移动和客户端前端,因为它们必须调用 REST api,但是 asp.net 核心 MVC 必须使用 HttpClient 来调用 REST api 而不是调用构成 buinsess/service 层的共享 class 库。
在选项 2 中,所有 REST api 负责调用 business/service 层,在那里处理安全性。
听起来您的目标是构建一个 Public API。这应该是独立的并自行处理安全性——MVC 网站只是另一个客户端(可能碰巧存在于同一个解决方案中),但理想情况下它们之间不应该有太多引用(基本上只是 API合同)。通过这种方式,您还可以更早地发现向后兼容性问题,而不是 MVC 站点始终以强类型方式工作(即使通过重构),而其他站点(尤其是移动客户端)则不会 - 您将拥有求助于 API.
的版本控制如果您在服务器端采取某些措施(例如缓存),性能确实应该不是问题,有大量的 API 以这种方式工作。