【问题标题】:C# cookie based authorization基于 C# cookie 的授权
【发布时间】:2011-09-18 22:42:18
【问题描述】:

我正在为我的页面使用 jquery cookie 实现 C# 授权。我在 cookie 和我的管理页面中设置/加密用户名和密码,如果我识别 cookie,则用户被授权。如果没有,他会被重定向到登录页面。问题是,该 cookie 在页面加载后被读取,因此我可以手动点击管理页面,并且仅在几秒钟内它就会被重定向。如何防止为还没有 cookie 的访问者加载管理页面?基于 cookie 的授权的正确架构是什么?

注意:我没有使用 ASP.NET 角色或用户表。我为用户实现了自己的表格。

【问题讨论】:

    标签: c# jquery cookies authorization


    【解决方案1】:

    我怀疑你是在重新发明轮子。您不必使用 Membership Provider 和 ASP.Net 成员模式来利用表单身份验证。当用户登录时,只需将 Auth Ticket (cookie) 放到他们上面就可以了。然后,您可以简单地在管理页面上进行管理检查。

    下面的一些建议...

    编辑:我最初发布了一种通过 UserData 在 Auth Ticket 中存储角色的方法,但我认为这对于这种情况来说有点过头了。

    Web.config:

    <authentication mode="Forms">
      <forms loginUrl="~/Account/LogOn" timeout="30" slidingExpiration="true" />
    </authentication>
    . . .
    <membership>
      <providers>
        <clear />
      </providers>
    </membership>
    

    登录后: 当用户提交他们的用户名和密码时,验证他们并检查他们是否是管理员:

    if (UserIsValid(username, pwd)) // some validation call
    {
        FormsAuthentication.SetAuthCookie(username, true);
    }
    

    Admin.aspx: 最后,快速破解来限制对管理页面的访问。当页面加载时,检查用户是/不是管理员:

    if (!IsAdmin(User.Identity.Name)) // some admin call
        Response.Redirect("Default.aspx");
    

    【讨论】:

    • 如果我错了,请纠正我:这里我们从代码中设置 cookie,这将保护我免受用户禁用 js 的情况。正确的?否则我仍然可以使用 jQuery 设置 cookie,并在后面的代码中读取它们..但在这种情况下我会忽略没有 js 的用户
    • 从客户端设置身份验证 cookie 是不安全的。您无法对其进行加密,因此可能会被欺骗。除非您将某种 AJAX 回传到服务器,然后将加密响应作为 cookie 丢弃?重点是 cookie 有效负载需要由服务器加密,否则任何人都可以冒充用户。
    • @Stewie Griffin:我简化了场景。在这种情况下,将数据存储在 UserData 中可能是多余的。
    【解决方案2】:

    问题是,您使用客户端代码进行安全检查。如果有人完全禁用 JavaScript,他将永远不会被重定向。将检查移至您的服务器端代码。

    【讨论】:

    • 你说我根本不应该使用cookies来解析用户?如果是这样,我应该使用什么?会话?
    • 基本上,是的:使用会话存储登录标志并将会话 ID 作为 cookie 发送给用户(无论如何,大多数框架都会为您执行此操作,这是使用会话的最大优势:- ) ).
    • 您的答案是正确的,但是我想使用 cookie 来实现它。另外,如果用户禁用 javascript,整个网站(以及互联网上所有其他 90% 的网站)都将无法运行。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-13
    • 2022-01-01
    • 1970-01-01
    • 2021-08-09
    • 2012-05-07
    相关资源
    最近更新 更多