基于Web的安全性,无需ASP .NET中的表单身份验

我想利用:

        Page.User.IsInRole("CustomRole");
        Page.User.Identity.IsAuthenticated

在页面方法内部工作时,以及web.config中的授权部分:

<authorization>
    <allow roles="Administrators, Supervisors" />
    <deny users="*" />
</authorization>

并且在类和方法级别应用规则:

[PrincipalPermission(SecurityAction.Demand, Role = "Administrators")] 

在我的应用程序中,我使用自定义机制进行身份验证,该机制为我提供了用户身份... http头。 我得到用户PIN码(某种ID)+角色。 但那是一个侧面情节。 没关系。

我实际上想要实现的是利用授权功能中的ASP .NET构建,但具有我的自定义认证机制。 我想我必须执行IPrincipalIIdentity ,是吗? 我在网上看到了很多样本​​,但都包含指定提供者的web.config配置,以及我认为不需要的FormsAuthentication类。 我只需要将我的用户对象(由我准备)注入请求,就是这样。

所以:

  • 什么是最简单的方法来实现它?
  • GenericPrincipal / IPrincipal有什么区别?
  • 如何获取/创建IIdentity对象? 我看到样品:

    var id = new FormsIdentity(authTicket);

  • 但我没有使用FormsAuthentication。

    谢谢


    总之,你必须实现你自己的认证模块。

    认证模块只是一个ASP.NET模块,但具有特殊用途。 它的AuthenticateRequest方法应该使用IPrincipal的实例来填充HttpContext.Current.User属性。

    回答你的其他问题: IPrincipal只是一个接口,而GenericPrincipal是它的一个实现。 你可以使用它,顾名思义它只是一个通用的实现,这意味着它应该适合你。 由于IPrincipal只是IIdentity和角色,您可能还需要GenericIdentity

    其他实现,比如RolePrincipal + FormsIdentity是为特定目的而设计的,例如这两个表单身份验证模块使用。

    有一些很好的例子,只是谷歌的“自定义认证模块”。


    在你做之前(创建/实现你自己的)之前,你是否尝试/考虑过将表单身份验证调整为现有的认证方案?

    我认为你“几乎在那里”(使用所有内置的ASP.net认证/成员资格/个人资料/角色),并且将现有认证方案“插入”表单身份验证可能更容易/更简单。

    这段代码应该给你一个灵活的表单身份验证的概念:

    if ((UserEmail.Text == "jchen@contoso.com") && (UserPass.Text == "37Yj*99Ps"))
    {
          FormsAuthentication.RedirectFromLoginPage 
             (UserEmail.Text, Persist.Checked);
    }
    else
    { ... }
    

    因此,它使用硬编码的“认证方案”(不是你应该的,但给你一个可能性的概念),甚至web.config中的列表 - 再次,只是一个示例:

    <authentication mode="Forms">
      <forms name=".FUBAR">
        <credentials passwordFormat="MD5">
          <user name="foo" password="b7ab5072e8fba7bed20384cc42e96193"/>
          <user name="bar" password="1c42e49a360aa7cc337a268a1446a062"/>
          <user name="john" password="5f4dcc3b5aa765d61d8327deb882cf99"/>
          <user name="jane" password="7c6a180b36896a0a8c02787eeafb0e4c"/>
        </credentials>
      </forms>
    </authentication>
    

    只是一个想法 - ....

    链接地址: http://www.djcxy.com/p/48159.html

    上一篇: based Security without Forms Authentication in ASP .NET

    下一篇: Where to create custom IPrincipal object?