- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我通常具有实施身份验证和授权的要求。我曾经使用具有用户,角色,Role_Pages,User_Pages和User_Roles的自定义代码来实现它。因此,通过这种方式,我们可以赋予某些用户角色(将多个页面组合在一起)和/或直接定义对某些页面的访问权限。所有具有指定精细权限的功能,例如在那些页面中添加/编辑/删除记录的功能。
我的问题是:使用表单身份验证实施此操作有多容易?与实施自定义解决方案相比,这有什么好处?我还担心知道从会话劫持和防止欺骗(攻击者可以重播请求并冒充合法用户)的欺骗方面是否会有任何优势。表单身份验证会在此有什么优势吗?或者只有SSL可以对此加以保护(这使得两种方法在这方面是平等的)。
最佳答案
表单身份验证只是一种将身份验证令牌从浏览器传递到服务器的机制,该服务器充当请求者的身份。现在,您正在使用Session变量来记住已登录用户的信息吗?这类似于表单身份验证,因为会话状态(部分)通过cookie维护。同样,表单身份验证会创建一个防篡改的身份令牌,并使用cookie进行存储,以便在用户发出后续请求时,该cookie被发送到服务器,服务器上说:“嘿,我是用户X。”顾名思义,表单身份验证只是一种用于身份验证(即识别)访问者的机制。
对于授权,您通常会使用URL授权,这是一种在Web.config中指定的机制。这些页面是某些用户(和/或角色)可以访问(或无法访问)的页面。同样,URL授权,顾名思义,只是一种授权用户的机制,用于确定给定的请求者是否有权检索特定资源。
那么,如何存储用户信息,例如用户名,电子邮件,密码等?那就是会员制发挥作用的地方。它是用于创建,存储和管理用户帐户的可扩展框架。还有角色系统,该系统是类似的可扩展模型,用于创建角色并将其与用户相关联。
然后,这些是您应该探索的工具和框架:表单身份验证,URL授权,成员资格和角色。它们是互补技术,(通常)串联使用。
为您解决特定问题:
使用Forms Authentication实施此操作有多么容易,以及与实施自定义解决方案相比有什么优势。
表单身份验证(以及URL身份验证和成员资格和角色)非常容易实现。使用这些技术而不是定制解决方案具有三个主要优点:
使用这些技术效率更高。您不必重新发明轮子,从而节省了很多时间。
使用这些技术可以减少错误代码。如果实施自定义解决方案,则可能会遇到安全漏洞或测试期间未发现的错误。自ASP.NET诞生以来(至今已有近十年),表单身份验证和URL授权都已存在,并已被全球数百万开发人员使用和“现场测试”。成员资格和角色已经存在了5-6年,并且具有相似的现场测试水平。显然,您不能对自定义解决方案说同样的话。
使用这些技术可使您的应用程序更易于维护。如果您需要雇用一个新的开发人员来帮助该站点,则她很可能已经熟悉auth等表格,但是需要花一些时间来加快自定义解决方案的速度。
我还担心知道从会话劫持和防止欺骗(攻击者可以重播请求并冒充合法用户)的欺骗方面是否会有任何优势。表单身份验证会在此有什么优势吗?或者只有SSL可以对此加以保护(这使得两种方法在这方面是平等的)。
表单身份验证具有非常严格的安全性(假设您使用的是默认设置)。身份验证票证经过加密和数字签名,并且内置了基于时间的有效期(以减少重放攻击的表面积)。我不确定您当前使用的自定义解决方案用于身份验证的原因,因为您没有提到它,但是我敢打赌它是会话状态。那将是“安全的”。关键是,身份令牌(在您的情况下为会话cookie和在表单为auth的情况下为身份验证票证)既安全又可以在没有SSL的情况下通过Internet安全传输。
但是,无论使用哪种方法,都必须对SSL至少保护登录页面。这是用户输入其凭据的页面。如果未通过SSL访问该页面,则用户的凭据将以纯文本格式通过Internet发送。
[会员资格,角色等]将使我能够直接通过角色分配用户对某些页面的访问权限(将访问定义分组到多个页面)
URL授权使您可以根据用户/角色锁定整个页面。要授予对页面上特定功能的访问权限,您必须编写自己的代码/逻辑。
要学习这些技术,我会毫不客气地建议您查看my tutorials on website security。 C#和VB中总共有15个循序渐进的教程,您可以下载完整的,经过测试的有效演示代码。它们涵盖了与用户帐户相关的方案的范围,从表单身份验证到URL授权再到基于角色的授权再到创建和管理用户帐户。
再次是URL:http://www.asp.net/security/tutorials
编程愉快!
关于asp.net - ASP.Net身份验证和授权选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3643943/
我正在使用SQL Server 2008 R2,并且想创建一个触发器。 对于每个添加(仅添加),将像这样更新一列: ABC-CurrentYear-AutoIncrementCode 例子: ABC-
是否可以在显示最终一致性的数据存储中创建/存储用户帐户? 似乎不可能在没有一堆架构复杂性的情况下管理帐户创建,以避免可能发生具有相同 UID(例如电子邮件地址)的两个帐户的情况? 最终一致性存储的用户
您好, 我有一个带有 Identity 的 .NetCore MVC APP并使用 this指导我能够创建自定义用户验证器。 public class UserDomainValidator : IU
这与以下问题相同:HiLo or identity? 我们以本站的数据库为例。 假设该站点具有以下表格: 帖子。 投票。 注释。 使用它的最佳策略是什么: 身份 - 这是更常见的。 或者 HiLo -
我想将 Blazor Server 与 ASP.NET Identity 一起使用。但我需要使用 PostgreSQL 作为用户/角色存储,因为它在 AWS 中。 它不使用 EF,这是我需要的。 我创
我正在开发一个 .NET 应用程序,它可以使用 Graph API 代表用户发送电子邮件。 提示用户对应用程序进行授权;然后使用获取的访问 token 来调用 Graph API。刷新 token 用
我使用 ASP.NET 身份和 ClaimsIdentity 来验证我的用户。当用户通过身份验证时,属性 User.Identity 包含一个 ClaimsIdentity 实例。 但是,在登录请求期
所以我在两台机器上都安装了 CYGWIN。 如果我这样做,它会起作用: ssh -i desktop_rsa root@remoteserver 这需要我输入密码 ssh root@remoteser
我尝试在 mac osx 上的终端中通过 telnet 连接到 TOR 并请求新身份,但它不起作用,我总是收到此错误消息: Trying 127.0.0.1... telnet: connect to
我正在开发一个 .NET 应用程序,它可以使用 Graph API 代表用户发送电子邮件。 提示用户对应用程序进行授权;然后使用获取的访问 token 来调用 Graph API。刷新 token 用
我正在开发一项服务,客户可以在其中注册他们的 webhook URL,我将发送有关已注册 URL 的更新。为了安全起见,我想让客户端(接收方)识别是我(服务器)向他们发送请求。 Facebook和 G
在 Haskell 中,有没有办法测试两个 IORef 是否相同?我正在寻找这样的东西: IORef a -> IORef a -> IO Bool 例如,如果您想可视化由 IORef 组成的图形,这
我是 .NET、MVC 和身份框架的新手。我注意到身份框架允许通过注释保护单个 Controller 操作。 [Authorize] public ActionResult Edit(int? Id)
我有一列具有身份的列,其计数为19546542,我想在删除所有数据后将其重置。我需要类似ms sql中的'dbcc checkident'这样的内容,但在Oracle中 最佳答案 在Oracle 12
这是我用来创建 session 以发送电子邮件的代码: props.put("mail.smtp.auth", "true"); props.put("mail.smtp.starttls.enabl
我想了解 [AllowAnonymous] 标签的工作原理。 我有以下方法 [HttpGet] public ActionResult Add() { return View(); } 当我没
在使用沙盒测试环境时,PayPal 身份 token 对某些人显示而不对其他人显示的原因是否有任何原因。 我在英国使用 API,终生无法生成或找到 token 。 我已经遵循协议(protocol)并
我对非常简单的事情有一些疑问:IDENTITY。我尝试在 phpMyAdmin 中创建表: CREATE TABLE IF NOT EXISTS typEventu ( typEventu
习语 #1 和 #5 是 FinnAPL Idiom Library两者具有相同的名称:“Progressive index of (without replacement)”: ((⍴X)⍴⍋⍋X⍳
当我第一次在 TFS 中设置时,我的公司拼错了我的用户名。此后他们将其更改为正确的拼写,但该更改显然未反射(reflect)在 TFS 中。当我尝试 checkin 更改时,出现此错误: 有没有一种方
我是一名优秀的程序员,十分优秀!