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

本文关键字:标识 NET 用户 角色 ASP 脚本 SQL 创建 | 更新日期: 2023-09-27 18:31:02

我们之前使用过成员资格,现在在新项目中,我们使用身份进行身份验证和授权。我们能够以编程方式创建用户和角色(在标识项目的种子方法中)。我们还需要将这些成员用户链接到应用程序用户,例如员工,同时在应用程序DAL的种子方法中创建用户。为此,我们之前使用了SQL Script。现在,我们需要编写类似的 SQL 脚本来创建标识用户和角色。从 SQL 脚本中,我们可以获取用户的 MemberId,并使用此 MemberId 值为其分配 Employee's MemberId 列。

我们遇到的问题是,存储过程(例如"aspnet_Membership_CreateUser")在成员数据库(aspnetdb)中可用,在我们创建的标识数据库中不可用。

脚本如下所示:

    -- 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. 这些存储过程是否存在于标识中?
  2. 处理这种情况的可能/建议的方法是什么,即将成员资格用户与使用身份的应用程序用户链接起来?

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

有许多从成员身份移动到标识的示例。看看这里。对于几个项目,我不得不自己这样做,最终编写了一些代码,这些代码将用户从成员资格表中获取其角色,循环访问并在标识表中创建新的应用程序用户,以满足我的需求。由于您可以向 ApplicationUser 添加属性(成员资格中的问题很棘手),因此您可以编写一些代码来获取成员资格所需的内容(名称、用户名、电子邮件等),操作和创建用户。存储在成员资格中的密码确实存在一些问题,因为在身份中它们是散列的,在会员资格中您可以选择纯文本,加密或散列。

至于你的问题:

  1. 标识没有存储过程或视图。所有查询都是通过 EntityFramework 生成的。
  2. 基于旧成员资格创建新的应用程序用户,并在完成后删除成员资格(表、视图、SP、提供程序)。我相信将会员用户与身份"链接"会在此过程中造成很多麻烦。所有的身份验证和管理工作都将由Identity及其UserManger,SigninManager,RolesManager等处理,您不需要成员资格来纠结。