如何保护不包含数据库或用户数据的MVC应用程序中的控制器操作?

Rob*_*ert 7 c# authentication asp.net-mvc controller access-token

我希望了解授权的细节机制,以便为我的情况制定策略.

我的情况是我是分布式应用程序的一部分.我的部分是一个MVC5应用程序,它基本上只包含几个返回单页应用程序视图的控制器.因此,点击控制器A并返回单页应用A.点击控制器B并获取单页应用B.等等.此应用程序不包含数据库或用户数据.完全不同的网站/服务器上的其他一些应用程序.我想询问其他应用程序,如果用户有效或让用户直接询问其他应用程序,并且只有在答案为是时才允许访问我的应用程序视图.所以,实质上,我想基于包含用于登录/用户验证的公开api的远程应用程序的单词来保护我的控制器.

有人向我建议,令牌认证是可行的方法.由于我缺乏经验,这有点令人生畏,但我已经埋没在一些阅读和视频演示中.以下是我目前基于有限理解总结任务的弱尝试.请根据需要更正:

  • 需要生成访问令牌
  • 获取访问令牌不是帐户控制器的一部分,它是OWIN中间件的一部分
  • 访问令牌将与我的控制器操作请求一起发送
  • 我的控制器操作,使用[Authorize]属性修饰,将解析令牌并执行正确的操作

问题:

  • Q1:我应该生成令牌还是其他应用程序 - 具有数据库和用户数据的应用程序?
  • Q2:我的控制器对用户一无所知.该数据位于其他应用中.为了做正确的事情,控制器在底层解析什么?从本质上讲,具体告诉他们,"是的,这个请求是可以的.返回视图."
  • 问题3:我使用VS2015附带的标准MVC5项目模板开始我的项目一段时间,因为我认为我将处理用户/登录等.事实证明并非如此.我是否必须从头开始重新启动此项目,因为该模板不符合此要求,或者我可以对其进行一些手术并继续吗?例如,我不知道该模板是否具有我需要的所有OWIN内容,或者可能有太多额外的垃圾(膨胀的帐户控制器,实体框架等)以便轻松转换/维护.
  • 问题4:令牌授权是否过度杀伤?是否有一种更简单的方法可以防止未经授权的用户访问我的控制器操作,考虑到项目的性质,这些操作更有意义?

任何见解将不胜感激.

更新:我在Q2中的意思是,最简单的是,[授权]如何工作?细节?我猜我必须告诉它如何工作.例如,一个愚蠢的例子来说明.如果我想告诉一个装有[Authorize]的控制器让任何拥有用户名"fred"的人,我将如何以及在哪里这样做?我不是在寻找代码.我在概念上思考.我的应用程序必须知道有关令牌的其他应用程序(身份验证应用程序)正在生成.一般来说,我会在MVC应用程序中添加什么来告诉它如何解码这些令牌?我在哪里添加它?有一个标准的地方吗?

小智 1

我似乎您需要实施 OpenID/OAuth2 流程。

这样,您的应用程序将能够对所有应用程序使用单点登录 (SSO),您所需要做的就是将 MVC5 应用程序设置为 OpenID/OAuth2 客户端。

看一下 Azure AD B2C,它非常适合此操作(我目前正在为我正在从事的 3 个项目实施此操作)。

https://www.asp.net/mvc/overview/security/create-an-aspnet-mvc-5-app-with-facebook-and-google-oauth2-and-openid-sign-on

https://azure.microsoft.com/en-us/services/active-directory-b2c/

https://identityserver.io/