ASP.NET Identity Web API MVC架构

问题描述 投票:2回答:2

我有关于ASP.NET Identity架构的问题。

这是我的设置。

  1. 主要的解决方案 - 业务、数据和Web API项目
  2. UI解决方案 - 消耗Web API的MVC项目

我已经在Web API上实现了身份认证和授权。

我不明白的是,我如何从Web API服务的UI中访问所有user.identity的东西?我是否要创建一个类来模拟 ApplicationUserIdentityUser 一旦他们登录?中似乎有重复的地方。User 类。对我来说,我知道授权是在Web API中完成的,所以我并不真正需要所有的属性。但是,如果没有授权操作的列表,UI如何显示授权模块?

UI是否只检查用户是否通过了UI的认证,而依靠Web服务来授权操作?我认为这是MVC和Web API分离的挑战。

asp.net-mvc model-view-controller asp.net-web-api asp.net-identity-2
2个回答
0
投票

如果你的应用程序严重依赖授权,那么在用户采取操作之前,你的UI可能要反映出用户的授权,这一点很重要。例如,如果一个用户没有被授权编辑一个对象,那么给他们提供一个 "编辑 "按钮是没有意义的。

如果你唯一感兴趣的信息是他们被授权进行什么操作,那么最好的解决方案可能是扩展 "编辑 "按钮。UserInfoViewModel 类,它是由 GetUserInfo() 动作中的默认 AccountController.cs 文件。例如,您可以将其扩展为包括一个叫做 IsAdmin 财产,甚至包括一系列的 RolesClaims.


0
投票

为什么你要把Web API和MVC项目分开?你这样做有什么具体的原因吗?

当你有两个项目,一个暴露了Web API,一个暴露了使用MVC的UI,你将有两个 分开 在Web服务器上运行的应用程序,具有独立的上下文。把它想象成为第三方网站构建一个MVC UI应用,该网站暴露了基于Web的API服务。

这意味着外部应用(MVC)需要代表用户向内部应用(Web API)进行身份验证,并以某种方式存储授权令牌,以便后续调用API。不知道你是如何实现的,但可以使用会话变量(不是一个好主意),或者使用加密的授权cookie来实现。

外层应用所知道的关于登录用户的信息,只是用户发送的认证信息(比如用户名或电子邮件)和Web API认证返回的响应(其中包含令牌和到期日期)。如果你需要在外部(MVC)应用程序中拥有更多的信息,你将不得不或者。

  • 自定义Web API认证以包含额外的信息--参见 AspNet Identity 2: 自定义OAuth端点响应

  • 在你的内层(Web API)应用程序中添加另一个服务,它可以返回任何你可能想要的关于登录用户的信息,并在MVC应用程序中认证后立即调用它。

而你必须在外部应用程序(MVC)中自行管理保存返回的信息。

你可能还想在你的外部应用程序(MVC)上设置一个单独的ASP.NET identity用法,并将内部应用程序作为OAuth提供者使用;但我不认为这是你想要的。

总之,我认为你需要重新评估你的架构,并考虑将Web API和MVC项目分开。如果你把这两个应用程序部署在同一个地方,这种方法不仅会增加大量的麻烦(比如管理你所问的授权),而且还意味着给服务器增加了一大堆(不必要的)工作,性能也会降低。而且我看不出你可能从这样的分离中得到任何好处。

© www.soinside.com 2019 - 2024. All rights reserved.