ASP.NET自定义身份验证的实践

事情是这样的:有一套ASP.NET应用程序,用户一般会用工号登录,但是我们希望在应用程序中方便地访问到该用户相关的其他信息,例如用户名或者工厂名称。

按照标准的ASP.NET Membership的做法,它不能提供这样的信息。Page.User.Identity.Name只是返回用户登录时使用的名称,在本例中是工号。

我们的目标是,能不能实现Page.User.Identity.Name显示用户的真实名称,而不是工号,甚至还可以显示其他的一些信息。

 

要实现这样的功能,我的思路是自定义身份验证。下面就是我的步骤,可以供大家参考

 

第一步:自定义Identity

Identity在安全设计中很重要,他一般代表了用户标识。本例中,我们添加了几个特殊的属性

    public class SECIdentity : IIdentity
    {


        public string DisplayName { get; set; }
        public string Factory { get; set; }
        public string Name { get; set; }




        public string AuthenticationType
        {
            get { return "Custom Authentication"; }
        }

        public bool IsAuthenticated
        {
            get { return true; }
        }
        public override string ToString()
        {
            return string.Format("{0},{1}", Factory, DisplayName);
        }
    }

第二步:自定义Principal

一个用户不仅需要有名称等基本信息,它还应该具有另外一些信息,例如角色等等。这可以通过封装成一个Principal来解决

    public class SECPrincipal : IPrincipal
    {
        public SECPrincipal(string name, string displayName, string factory)
        {
            identity = new SECIdentity()
            {
                Name = name,
                DisplayName = displayName,
                Factory = factory
            };
        }
        private IIdentity identity;
        public IIdentity Identity
        {
            get
            {
                return identity;
            }
        }

        public bool IsInRole(string role)
        {
            return true;
        }
    }
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值