gpt4 book ai didi

asp.net-mvc - 处理 mvc 安全性...覆盖成员资格提供程序、操作过滤器或其他什么?不知道如何处理

转载 作者:行者123 更新时间:2023-12-04 06:57:57 25 4
gpt4 key购买 nike

我对如何在我的 ASP .NET MVC 应用程序中处理安全性感到非常困惑。这是我知道我想做的事情:

1)我想要自己的架构布局,这样我就可以实现我想要的安全性,而不是绑定(bind)到微软的默认数据库架构(我在其他 dbms 上几乎不支持该架构)。

2) 这听起来很矛盾,但我想使用 Entity Framework ,是的,MS Sql Server 2005。仅仅因为我正在这样做,并不意味着我想被锁定在这些决定中。我已经看到许多其他 dbms 供应商提供 EF 支持,所以这似乎是一个更好的方法。

基本的安全设置相当简单。有用户。用户具有角色。我有 3 个基本表:用户、角色、用户角色。

那么,如果这是我签约创建的专业 Web 应用程序,那么有什么好的方法呢?创建自定义成员资格提供程序实现似乎是最彻底的,而且它似乎是一个相当可移植的解决方案。我看过几篇文章谈论只是创建一个 ActionFilter 或 CustomAttribute。可能两者是同一件事;就像我说的,我真的很困惑。

这里的底线是我试图让我的脚湿透这项技术,但我想知道这将如何在现实世界中完成。我已经查看了 nerd diner 示例,它使用了默认的成员(member)提供程序设置(包括模式),这不是我想要的。

我已经用谷歌搜索了这个。我已经阅读了几十篇文章,发现了很多实现。我已经浏览了 ASP .NET Unleashed,它只有标准的成员(member)资格提供者解释。我真的只是想从你们这些从事过这个行业的人那里找到一些可靠的专业建议。

谢谢你的时间。

更新。

我已经设法让 CSS 文件免于身份验证。我将以下内容添加到 web.config(应用程序级别)。

  <location path="Content">
<system.web>
<authorization>
<allow users="*" />
</authorization>
</system.web>
</location>
<location path="~/Views/Account">
<system.web>
<authorization >
<allow users="*" />
</authorization>
</system.web>
</location>

现在有一个逻辑问题。我之前在 web.config 中指示应用程序登录 url 是:LogOn.aspx。因为,我已经实现了自定义成员资格和提供者,所以我想我会使用默认帐户登录页面。该页面为您提供注册新帐户的选项;但是,单击“注册”超链接只会让您停留在“登录”页面上。显然,新用户对此不会很高兴。我试图使 Views/Account 文件夹中的所有页面都没有使用上面的 xml 进行身份验证,但它似乎没有奏效。想法?

****************************************** 再次更新 ******** ************************************

显然, Location 标签只需要目录名而不是目录树。至少对我来说似乎是这样。我将第二个位置标签更改为如下所示:
  <location path="Account">
<system.web>
<authorization >
<allow users="*" />
</authorization>
</system.web>
</location>

现在我可以访问帐户 View 文件夹中的所有文件,以及所有帐户 Controller 操作。这里有一个有趣的讽刺:我已经创建了一个自定义成员资格提供程序实现(我很高兴我这样做了),所以我可以使用 ASP .NET MVC 附带的普通注册和登录页面。我想,如果它没有损坏,请不要修复它。所以告诉我......你们中的任何人将这些页面放入生产环境中并进行最小的更改会有多舒服?只是好奇。我正处于一个我只是想弄清楚如何做这些事情的地步;我还不能真正评估做或使用 X 是否是一件好事。

最佳答案

据我所知,你应该能够做你正在谈论的事情而不会大惊小怪......

因为 ASP.Net MVC 是建立在 ASP.Net 之上的,所以您应该能够利用 ASP.Net 的能力,如您所描述的那样放入您自己的自定义成员资格提供程序。创建后,要让 ASP.Net MVC 使用此提供程序,您只需在 web.config 中注册您的提供程序,并将现有的 Authorize 属性添加到您想要锁定的任何 Controller 。

这个现有的 Authorize 属性与给定的提供者无关,它只是查看哪个提供者是当前的,在您的情况下,您的自定义提供者将是当前的。

您说您已阅读有关创建自定义提供程序的文章,因此我不会在那里详细介绍,您不必创建自定义属性/过滤器(ActionFilter 是一个属性,但属性并不总是 ActionFilter - ActionFilter 是一个 MVC 概念,属性是一个 .Net 概念——希望有所帮助)。

所以看起来你应该拥有你需要实现的一切。

如果您需要更多,请告诉我。

更新:

我猜想以下是 css 的问题 - 我刚刚遇到了一个非常相似的问题......简而言之,我认为 MVC 正在尝试对 CSS 文件的获取进行身份验证,因为您没有登录然而,它不允许你下载 CSS。

验证这一点的方法是执行类似于以下的操作(注意代码在 global.asax 中):

    public void Application_AuthenticateRequest(object sender, EventArgs e)
{
var shouldAuthenticate = true;

if (Request.Path.Contains("/Error") || Request.Path.Contains(".css") || Request.Path.Contains(".jpg") ||
Request.Path.Contains(".png") || Request.Path.Contains(".js") || Request.Path.Contains(".gif") || Request.Path.Contains("/asset.axd?id="))
shouldAuthenticate = false;

...
}

当您调试您的应用程序时,请尝试在此处设置一个断点,并查看每次登录页面加载调用多少次以及每个“Request.Path”是什么......如果您看到它正在尝试进行身份验证那么这些 Assets 就是你的问题。

关于asp.net-mvc - 处理 mvc 安全性...覆盖成员资格提供程序、操作过滤器或其他什么?不知道如何处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2313905/

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