使用 ASP.NET 身份在 SQL 脚本中创建用户和角色
Create users and roles in SQL Script with ASP.NET Identity
我们之前使用了Membership,现在在新项目中我们使用Identity来进行身份验证和授权。我们能够以编程方式创建用户和角色(在身份项目的种子方法中)。我们还需要 link 这些成员用户到应用程序用户,例如在应用程序 DAL 的种子方法中创建用户时的员工。为此,我们之前使用了 SQL 脚本。现在我们需要编写类似 SQL 的脚本来创建身份用户和角色。从 SQL 脚本中,我们可以获取用户的 MembershipId 并使用此 MembershipId 值为其分配员工的 MembershipId 列。
我们遇到的问题是,存储过程例如"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)
问题:
- Identity中是否存在这些存储过程?
- 有什么 possible/suggested 方法来处理这种情况,即 link 会员用户与使用身份的应用程序用户?
有很多从成员资格转变为身份的例子。看看here。我不得不自己为几个项目这样做,最后编写了一些代码,从成员表中获取用户及其角色,迭代并在身份表中创建新的 ApplicationUsers,根据我的需要定制。由于您可以向 ApplicationUser 添加属性(这在 Membership 中很棘手),您可以编写一些代码来从成员中获取您需要的内容(姓名、用户名、电子邮件等),操作和创建用户。存储在会员中的密码确实有一些问题,因为在身份中它们是散列的,在会员中你可以选择纯文本、加密或散列。
关于您的问题:
- Identity 没有存储过程或视图。所有查询都是通过 EntityFramework.
生成的
- 根据您的旧成员资格创建新的 ApplicationUser,并在完成后删除成员资格(表、视图、SP、提供者)。我相信 "linking" 会员身份的用户会在此过程中造成很多麻烦。所有的身份验证和管理工作都将由 Identity 及其 UserManger、SigninManager、RolesManager 等处理,您不需要 Membership 来纠缠不清。
我们之前使用了Membership,现在在新项目中我们使用Identity来进行身份验证和授权。我们能够以编程方式创建用户和角色(在身份项目的种子方法中)。我们还需要 link 这些成员用户到应用程序用户,例如在应用程序 DAL 的种子方法中创建用户时的员工。为此,我们之前使用了 SQL 脚本。现在我们需要编写类似 SQL 的脚本来创建身份用户和角色。从 SQL 脚本中,我们可以获取用户的 MembershipId 并使用此 MembershipId 值为其分配员工的 MembershipId 列。
我们遇到的问题是,存储过程例如"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)
问题:
- Identity中是否存在这些存储过程?
- 有什么 possible/suggested 方法来处理这种情况,即 link 会员用户与使用身份的应用程序用户?
有很多从成员资格转变为身份的例子。看看here。我不得不自己为几个项目这样做,最后编写了一些代码,从成员表中获取用户及其角色,迭代并在身份表中创建新的 ApplicationUsers,根据我的需要定制。由于您可以向 ApplicationUser 添加属性(这在 Membership 中很棘手),您可以编写一些代码来从成员中获取您需要的内容(姓名、用户名、电子邮件等),操作和创建用户。存储在会员中的密码确实有一些问题,因为在身份中它们是散列的,在会员中你可以选择纯文本、加密或散列。
关于您的问题:
- Identity 没有存储过程或视图。所有查询都是通过 EntityFramework. 生成的
- 根据您的旧成员资格创建新的 ApplicationUser,并在完成后删除成员资格(表、视图、SP、提供者)。我相信 "linking" 会员身份的用户会在此过程中造成很多麻烦。所有的身份验证和管理工作都将由 Identity 及其 UserManger、SigninManager、RolesManager 等处理,您不需要 Membership 来纠缠不清。