使用asp.net Identity进行Asp.net web API 2身份验证

时间:2014-03-02 16:15:54

标签: c# asp.net-web-api asp.net-mvc-5 asp.net-identity

我的解决方案包含3个项目,首先是数据访问层(其中定义了模型和数据库上下文),另外两个是Asp.net MVC 5和Asp.net Web Api 2项目。

对于身份验证和授权,我使用的是我设置的Asp.net Identity(在我的DAL项目中):

public class DatabaseContext : IdentityDbContext<User>
{
    public DatabaseContext()
        : base("DefaultConnection")
    {
        Configuration.LazyLoadingEnabled = true;
    }

    public DbSet<IdentityUser> IdentityUsers { get; set; }

    /*
        Other DbSets ...
    */
}

我的用户类扩展了IdentityUser。

在我的ASP.net项目中,我更改了一点帐户控制器,因此它适用于我的数据库上下文,这里是我更改的相关部分:

[Authorize]
public class AccountController : Controller
{
    public AccountController()
        : this(new UserManager<User>(new UserStore<User>(new DatabaseContext())))
    {
    }

    public AccountController(UserManager<User> userManager)
    {
        UserManager = userManager;
    }

    public UserManager<User> UserManager { get; private set; }
}

这部分工作正常。所以我的问题是,为了使我的Web API项目与我的实体User和我的数据库上下文一起工作,我必须做些什么改变,所以为了使用API​​用户必须登录? (当然用户可以选择通过API注册)。

即。我想通过使用我的数据库上下文和扩展Identity User类的类User来为web api 2启用授权和身份验证。

更新

我试图做的是:我已经用我的类User替换了我的web api 2项目中的所有IdentityUser类,但是在线(当我尝试登录时):

User user =  await userManager.FindAsync(context.UserName, context.Password);

我收到错误:

System.Data.SqlClient.SqlException:无效的对象名称'dbo.AspNetUsers'。

这种方法适用于我的asp.net MVC项目。

1 个答案:

答案 0 :(得分:1)

简而言之,我所做的是:

在我的DatabaseContext类中,我添加了这些行:

  protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        base.OnModelCreating(modelBuilder);
        modelBuilder.Entity<IdentityUser>()
            .ToTable("AspNetUsers");
        modelBuilder.Entity<User>()
            .ToTable("AspNetUsers");
    }

在asp.net web api项目中,我已将所有类IdentityUser更改为User,就是这样