gpt4 book ai didi

c# - 如何保护不包含数据库或用户数据的 MVC 应用程序中的 Controller 操作?

转载 作者:太空狗 更新时间:2023-10-29 20:19:36 24 4
gpt4 key购买 nike

我想了解授权的具体机制,以便针对我的情况制定策略。

我的情况是我是分布式应用程序的一部分。我的部分是一个 MVC5 应用程序,它基本上只包含几个返回单页应用程序 View 的 Controller 。所以点击 Controller A 并返回单页应用程序 A。点击 Controller B 并获取单页应用程序 B。等等。此应用程序不包含数据库或用户数据。完全不同的网站/服务器上的其他一些应用程序也是如此。我想询问其他应用程序用户是否有效,或者让用户自己直接询问其他应用程序,如果答案是肯定的,则只允许访问我的应用程序 View 。因此,从本质上讲,我想根据包含用于登录/用户验证的公开 API 的远程应用程序的词来保护我的 Controller 。

有人向我建议 token 身份验证是可行的方法。我对它缺乏经验,这让我有点望而生畏,但我已经把自己埋在了一些阅读和视频演示中。这是我目前基于有限理解总结任务的微弱尝试。请根据需要更正:

  • 需要生成访问 token
  • 获取访问 token 不是帐户 Controller 的一部分,它是 OWIN 中间件的一部分
  • 访问 token 将与我的 Controller 操作请求一起发送
  • 我的 Controller 操作,装饰有 [Authorize] 属性,将解析 token 并做正确的事情

问题:

  • 问题 1:我应该生成 token 还是其他应用程序(具有数据库和用户数据的应用程序)?
  • Q2:我的控制者对用户一无所知。该数据在另一个应用程序中。为了做正确的事情, Controller 在幕后具体分析了什么?本质上,具体告诉他们的是,“是的,这个请求没问题。返回 View 。”
  • 问题 3:我使用 VS2015 附带的标准 MVC5 项目模板开始了我的项目,因为我认为我会处理用户/登录等。事实并非如此。我是否必须返回并从头开始重做这个项目,因为该模板不符合此要求,或者我可以对其进行一些手术并继续吗?例如,我不知道该模板是否具有我需要的所有 OWIN 内容,或者是否有太多额外的垃圾(臃肿的帐户 Controller 、 Entity Framework 等)而无法轻松转换/维护。
  • 问题 4: token 授权在这里是否过大?鉴于项目的性质,是否有更简单的方法来防止未经授权的用户访问我的 Controller 操作更有意义?

如有任何见解,我们将不胜感激。

更新:我在第 2 季度的意思是,最简单地说,[Authorize] 是如何工作的?细节?我猜我必须告诉它如何工作。例如,一个愚蠢的例子来说明。如果我想告诉一个装饰有 [Authorize] 的 Controller 允许任何拥有用户名“fred”的人进入,我将如何以及在何处执行此操作?我不是在寻找代码。我在概念上思考。我的应用程序必须了解其他应用程序(身份验证应用程序)正在生成的 token 。一般而言,我应该向我的 MVC 应用程序添加什么来告诉它如何解码这些 token ?我在哪里添加它?有没有一个标准的地方?

最佳答案

我认为您的方向是正确的,并且您提到的步骤是正确的。我会根据我的理解回答你的问题:

Q1。另一个应用程序需要授权和生成 token (无论他们使用什么授权机制),您应该在显示您的 View 之前收到此 token 。由于数据来自其他应用程序,他们必须让您的 Controller 访问他们的数据。这就是为什么您需要向其他应用程序询问 token /授权。使用从其他应用程序获得的有效 token ,您的应用程序可以向其数据发送有效且授权的请求。

Q2。您可以从您这边做的是添加一个检查,以检查您的操作/ View 请求是否来自授权用户。为此,您需要检查此请求是否具有有效 token 。

Q3。我不知道你在这里所说的"template"是什么意思。但是,如果您需要将您的 Controller 集成到其他解决方案中,您确实需要知道其他解决方案的作用以及它在授权方面提供的内容,当然还有数据。为此,他们应该为您的应用程序提供对公共(public) api 的访问权限。

第 4 题。这是其他应用程序需要做的事情。据我了解,我认为您只是将 Web API 添加到现有系统,因此我认为您需要真正了解如何与其他应用程序集成。他们应该有清晰的公开 API,供您执行此操作以访问他们的功能和数据。

由于您没有提到这个其他应用程序是类似于安全的企业解决方案还是 Google API(具有公共(public) API),因此很难准确地说出您可以从其他应用程序中得到什么。

我认为您需要尝试 JSON 网络 token (JWT)
虽然我自己没有使用过它。 stormpath.com/blog/token-auth-spa –它对于验证是否向您的 Controller 发出请求很有用。这是一个与您类似的问题(我认为)以及 JWT 如何解决它 How to use JWT in MVC application for authentication and authorization?https://www.codeproject.com/Articles/876870/Implement-OAuth-JSON-Web-Tokens-Authentication-in


您可以像这样覆盖 AuthorizeAttribute:https://msdn.microsoft.com/en-us/library/ee707357(v=vs.91).aspx .您可以将检查您决定使用的任何 token /身份验证机制的授权逻辑添加到这个新的操作过滤器中。然后将该新属性添加到您的操作中。因此,如果覆盖时您的自定义授权属性如下所示:

public class RestrictAccessToAssignedManagers : AuthorizationAttribute

然后你的 Action 会有这样的属性装饰:

[RestrictAccessToAssignedManagers]
public ActionResult ShowallAssignees(int id)

找到一篇可能也有帮助的好文章 - https://blogs.msdn.microsoft.com/martinkearn/2015/03/25/securing-and-securely-calling-web-api-and-authorize/

关于c# - 如何保护不包含数据库或用户数据的 MVC 应用程序中的 Controller 操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41887140/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com