WebApi MVC 6,有没有办法重用MVC授权?

Posted

技术标签:

【中文标题】WebApi MVC 6,有没有办法重用MVC授权?【英文标题】:WebApi MVC 6, is there a way to reuse MVC authorization? 【发布时间】:2016-08-24 08:28:38 【问题描述】:

我有一个用 ASP NET MVC 编写的网站。它使用 ASP.NET 身份来授权用户执行特定的控制器操作。它对用户使用不同的声明(如角色)。 现在我需要编写一个移动应用程序,它应该和我的网站一样,所以为了避免重复代码,我决定将所有数据访问层移动到单独的 Web Api(MVC 6) 项目,这样我就可以重用之间的逻辑应用程序。问题是 - 有没有办法以某种方式“重用”我在 MVC 项目中拥有的授权,比如生成一些令牌并将其传递给 Web Api 或其他东西?从头开始重写它会花费太多时间,而我没有太多时间。任何答案/提示/文章将不胜感激。

【问题讨论】:

您是否在您的 mvc 中使用表单身份验证?您如何构建您的移动应用程序?网络和移动设备的视图是否相同? 我将如何构建我的移动应用程序重要吗?它将通过 HTTP 调用我的 API 来获取数据。视图是分开的。 Web API 只处理逻辑层。 是的,webapi 仅用于获取数据,但是您如何从您的应用程序中验证用户身份?它必须在 webapi 中完成。这就是我问的原因。我们在我们的应用程序中使用了 oauth bearer token 在 webapi 中进行身份验证。那么任何从 webapi 获取数据的请求都将被验证。 【参考方案1】:

是的,但 API 通常不使用 cookie,因此您可以配置您的 API 可以使用的 Bearer Token authentication。 OWIN 中间件将按照与 MVC 中处理 cookie 相同的方式对令牌进行身份验证并填充用户主体。

之后,您将能够以与 MVC 控制器相同的方式处理授权。

【讨论】:

API没有cookie是什么意思? API 可以在浏览器之外使用,因此不适合依靠 cookie 来提供身份验证方法。不记名令牌的用途与 cookie 相同,由客户端在请求标头中发送到 API。 是的,但这意味着这取决于您使用 IT 的方式,而不是 WebApi 没有使用 cookie 您可能希望构建您的 API 以支持尽可能多的客户端集成,因此不会强制客户端在 Web 浏览器中运行。我已经更新了我的答案以反映这一点 @JohnMc 谢谢,我会尝试不记名令牌并让您知道结果:)

以上是关于WebApi MVC 6,有没有办法重用MVC授权?的主要内容,如果未能解决你的问题,请参考以下文章

MVC或WebAPI发布后报错404问题的总结

未经授权的 webapi 调用返回登录页面而不是 401

仍登录 MVC 站点,但无法调用 Web API

NET Core 3.1 MVC 授权/身份验证,带有在单独的 Net Core 3.1 Web Api 中从外部获取的令牌 (JWT)

使用 ASP.NET 5 MVC 6 Web API 进行 Cookie 身份验证

在自定义授权 MVC4 Web Api 中访问 post 或 get 参数