关闭

asp.net identity(微软首推的身份验证)2.0分析-基于vs2015默认程序

标签: asp.net身份授权
1140人阅读 评论(0) 收藏 举报
分类:

因为总是感觉,asp.net identity用起来不太舒服,比如代码的扩展性,以及维护以后的版本,所以对其进行分析

下面进入正文:

在vs2015自带的默认程序中,App_Start/IdentityConfig.cs,通过ApplicationUserManager Create函数开始分析,函数主要内容如下

  public static ApplicationUserManager Create(IdentityFactoryOptions<ApplicationUserManager> options, IOwinContext context) 
        {
            var manager = new ApplicationUserManager(new UserStore<ApplicationUser>(context.Get<ApplicationDbContext>()));
..........

可以得出,该函数初始化,新建ApplicationUserManager类(该类自身),传入一个新建UserStore泛型类,并给该UserStore泛型类通过查看该类定义得出,传入的为DbContext context参数

而在Microsoft.AspNet.Identity.EntityFramework二进制dll中,UserStore新建用户的函数为

public async virtual Task CreateAsync(TUser user)
        {
            ((UserStore<TUser, TRole, TKey, TUserLogin, TUserRole, TUserClaim>) this).ThrowIfDisposed();
            if (user == null)
            {
                throw new ArgumentNullException("user");
            }
            ((UserStore<TUser, TRole, TKey, TUserLogin, TUserRole, TUserClaim>) this)._userStore.Create(user);
            await ((UserStore<TUser, TRole, TKey, TUserLogin, TUserRole, TUserClaim>) this).SaveChanges().WithCurrentCulture();
        }

可以看到对数据库的操作关键在于_userStore.Create,而_userStore字段的初始化为,

this._userStore = new EntityStore<TUser>(context);
另外关于角色的管理,_roleStore字段为
this._roleStore = new EntityStore<TRole>(context);

EntityStore泛型中,通过内部调用EntityFramework对数据库进行操作

        public void Create(TEntity entity)
        {
            this.DbEntitySet.Add(entity);
        }
        

由此可知道,自己构建对数据库的操作,并和asp.net identity集成的方法




附上EntityStore的代码

namespace Microsoft.AspNet.Identity.EntityFramework
{
    using System;
    using System.Data.Entity;
    using System.Linq;
    using System.Runtime.CompilerServices;
    using System.Threading.Tasks;
    
    internal class EntityStore<TEntity> where TEntity: class
    {
        public EntityStore(DbContext context)
        {
            this.Context = context;
            this.DbEntitySet = context.Set<TEntity>();
        }
        
        public void Create(TEntity entity)
        {
            this.DbEntitySet.Add(entity);
        }
        
        public void Delete(TEntity entity)
        {
            this.DbEntitySet.Remove(entity);
        }
        
        public virtual Task<TEntity> GetByIdAsync(object id)
        {
            return this.DbEntitySet.FindAsync(new object[] { id });
        }
        
        public virtual void Update(TEntity entity)
        {
            if (entity != null)
            {
                this.Context.Entry<TEntity>(entity).State = EntityState.Modified;
            }
        }
        
        public DbContext Context { get; private set; }
        
        public DbSet<TEntity> DbEntitySet { get; private set; }
        
        public IQueryable<TEntity> EntitySet
        {
            get
            {
                return this.DbEntitySet;
            }
        }
    }





0
0
查看评论

Asp.Net 5 Identity 快速集成

Asp.Net 5 Identity 快速集成使用VS创建Asp.Net 5项目时,默认会使用Identity作为用户验证的基础,以前微软一直把用户信息定得很死板,没法灵活的适应于生产,但自从.net 5出来后,就作了很大的改动,现在可以很方便的使用起来:Idenity 启用在Startup.Con...
  • xy109
  • xy109
  • 2016-03-13 21:29
  • 234

AspNet Identity 和 Owin 谁是谁

英文原文:http://tech.trailmax.info/2014/08/aspnet-identity-and-owin-who-is-who/   最近我发现Stackoverflow上有一个非常好的问题.提问者问:为什么在调用AuthenticationManager.Sig...
  • z93f37fj
  • z93f37fj
  • 2017-02-19 10:12
  • 320

ASP.NET WebForm Identity使用

环境   win10企业版x64+visual studio 2017+.net 4.5 step1   基本使用+邮件确认+密码重置   https://docs.microsoft.com/en-us/aspnet/web-forms/overview/security/create-a...
  • linux12a
  • linux12a
  • 2017-08-02 15:33
  • 432

ASP.NET Identity

ASP.NET Identity  初识Identity 摘要 通过本文你将了解ASP.NET身份验证机制,表单认证的基本流程,ASP.NET Membership的一些弊端以及ASP.NET Identity的主要优势。 目录 身份验证(Authenticatio...
  • moshansk
  • moshansk
  • 2014-08-06 09:48
  • 5338

Asp.Net Core-Identity迁移

在本章中,我们将讨论Identity迁移。 在ASP.NET Core MVC中,在Startup.cs文件中配置了身份验证和身份功能。 1 2 3 4 5 6 7 8 9 10 public...
  • qq_36598803
  • qq_36598803
  • 2017-08-31 11:48
  • 341

Yii 2.0学习日记:用户登陆详细解析(下)

在上一篇博文中,笔者讲述了yii2应用用户登陆的基本方法,但是这些方法到底是怎样实现登陆的呢?底层的原理到底是什么?在这篇博文笔者将从Yii的源码角度分析登陆的基本原理以及cookie自动登陆的原理,通过源码的分析,各位对Yii的理解也会更上一层楼。
  • a553181867
  • a553181867
  • 2016-03-27 22:16
  • 3826

asp.net identity(微软首推的身份验证)2.0分析-基于vs2015默认程序

因为总是感觉,asp.net identity用起来不太舒服,比如代码的扩展性,以及维护以后的版本,所以对其进行分析 下面进入正文: 在vs2015自带的默认程序中,App_Start/IdentityConfig.cs,通过ApplicationUserManager Create函数开始分析...
  • loongsking
  • loongsking
  • 2017-02-05 17:50
  • 1140

[ASP.NET Identity 2.0]

namespace WebApplication1.Models { // 您可以在 ApplicationUser 類別新增更多屬性,為使用者新增設定檔資料,請造訪 http://go.microsoft.com/fwlink/?LinkID=317594 以深入了解。 publi...
  • kongzhixuan
  • kongzhixuan
  • 2016-01-19 12:53
  • 298

vs2015 webapi模板中 身份验证的调用

参考博客http://www.cnblogs.com/yuefei/p/4250027.html webapi自带了一套身份验证,使用方法为: 1、webapi地址/api/Account/Register用这个api注册用户,系统会在app_data下面生成一个数据库,注意注册用户的时候,密码需要...
  • tongdengquan
  • tongdengquan
  • 2017-03-10 18:33
  • 1392

Asp.Net Core 2.0 多角色权限认证

在使用 WebForm 技术开发网站的时候,微软就提供了 Form 身份认证,这使得登录认证简单了许多,不同于 WebForm 以及后来的 Asp.Net Mvc,Asp.Net Core 中的身份认证与之前相比使用更加便捷,本文介绍 Asp.Net Core 2.0 多角色授权认证,首先我们需要在...
  • sD7O95O
  • sD7O95O
  • 2017-10-10 00:00
  • 876
    个人资料
    • 访问:314066次
    • 积分:4788
    • 等级:
    • 排名:第7153名
    • 原创:179篇
    • 转载:36篇
    • 译文:1篇
    • 评论:24条
    最新评论