使用ASP.NET标识在SQL脚本中创建用户和角色

时间:2016-01-20 05:56:17

标签: c# asp.net asp.net-mvc asp.net-identity asp.net-identity-2

我们之前已经使用过Membership,现在我们正在使用Identity进行身份验证和授权。我们能够以编程方式创建用户和角色(在Identity方法的Identity项目中)。我们还需要在应用程序DAL的Seed方法中创建用户时将这些成员资格用户链接到应用程序用户,例如Employee。早些时候我们使用过SQL Script。现在我们需要编写类似的SQL脚本来创建Identity用户和角色。从SQL Script我们可以为用户获取MembershipId,并使用此MembershipId值为其分配Employee的MembershipId列。

我们遇到的问题是存储过程,例如“aspnet_Membership_CreateUser”在Membership DB(aspnetdb)中可用,在我们创建的Identity DB中不可用。

脚本如下所示:

    -- Create roles for 'XXX' Application 
    EXEC [aspnet_Roles_CreateRole] 'XXX','ADMIN'
    EXEC [aspnet_Roles_CreateRole] 'XXX','USER'

    -- Create new membership user 
    EXEC @return_value = [dbo].[aspnet_Membership_CreateUser]
    @ApplicationName = N'XXX',
    @UserName = N'testadmin@xxx.com',
    @Password = N'QhoM803ew/sdfdf/4NQ=',
    @PasswordSalt = N'dGzG1ddfdfdfk1Kqwddff==',
    @Email = N'testadmin@xxx.com',
    @PasswordQuestion = N'secretQuestion',
    @PasswordAnswer = N'secretAnswer',
    @IsApproved = true,
    @CurrentTimeUtc = @nowUtc,
    @CreateDate = @now,
    @UniqueEmail = 1,
    @PasswordFormat = 1,
    @UserId = @MembershipId_OrgAdmin OUTPUT

    PRINT 'Test Admin Created successfully.' 

    -- Assign role to user
    EXEC  [aspnet_UsersInRoles_AddUsersToRoles]
        @ApplicationName  = N'XXX',
        @UserNames        = N'testadmin@xxx.com',
        @RoleNames       = N'ADMIN',
        @CurrentTimeUtc   =  @nowUtc


    PRINT 'Test Admin assigned to ADMIN Role successfully.' 

    -- Finally create a application user and connect it to membership user

INSERT INTO OrganizationUser
(MembershipId,IsDeleted,FirstName,LastName,PhoneNumber,Extension,Address1,Address2,City,State,ZipCode,Country,JobTitle,IsActive,OrganizationId,IsPasswordReset,DownloadCode,IsContactPerson,LastLoginDate,WelcomeEmailDate,CreatedDate,CreatedBy,UpdatedDate,UpdatedBy)
VALUES
(@MembershipId_OrgAdmin,0,'XXX','Admin','2888262','800','ABC','Charlotte, SC 21270','SC','SC','21270','US','XXX Admin',1,(select OrganizationId from Organization where  Name='XXX'),0,'1-1-14110985',1,null,null,@now,null,@now,null)

问题:

  1. 这些存储过程是否存在于Identity中?
  2. 有哪些可能/建议的方法来处理这种情况,即使用Identity?链接会员用户和应用程序用户?

1 个答案:

答案 0 :(得分:2)

有许多从成员身份转移到身份的示例。看看here。我必须自己完成几个项目,最后编写一些代码,使用户从会员表中获取角色,迭代,并在Identity表中创建新的ApplicationUsers,根据我的需要进行定制。由于您可以向ApplicationUser添加属性(会员资格中很棘手),您可以编写一些代码,从成员资格(名称,用户名,电子邮件等)中获取所需内容,操作和创建用户。存在会员资格的密码存在一些问题,例如在身份证中它们被散列,在会员资格中,您可以选择纯文本,加密或散列。

关于你的问题:

  1. 标识没有存储过程或视图。所有查询都是通过EntityFramework生成的。
  2. 根据您的旧成员身份创建新的ApplicationUser,并在完成后删除成员资格(表,视图,SP,提供程序)。我相信"链接"会员用户身份认同会带来很多麻烦。所有身份验证和管理内容都将由Identity及其UserManger,SigninManager,RolesManager等处理,您不需要会员资格纠缠在一起。