阅读lots of articles并进行大量错误启动后,我需要建议将 Microsoft ASP.NET Identity 添加到现有的ASP.NET中Web窗体应用程序。我现有的应用程序和典型的样本之间有很多细微的差别,我不知道如何开始。以下是关于我现有应用程序的一些观点:
ID int PK
,没有用户名(如此),密码,名字,姓氏,电子邮件和其他一些属性。它还有一个Roles表(4-5个条目)和一个提供许多关系的UserRoles表。除了User表上的属性之外,没有“声明”。web.config
中的模板连接字符串形成的(基本上,数据库名称和服务器实例名称是动态填充的)所以,这里有一些我提出的障碍,问题和问题。对以下任何问题的任何建议都将非常感激:
async
代码。这是否会导致ASP.NET身份框架出现问题?我听说如果通过调用堆栈实现,async
效果最好。HttpContext.User
而发生冲突?我的架构
CREATE TABLE [dbo].[User](
[ID] [int] IDENTITY(1,1) NOT NULL,
[OrganisationID] [int] NOT NULL,
[SaltHashPassword] [nvarchar](128) NOT NULL,
[FirstName] [nvarchar](64) NOT NULL,
[Surname] [nvarchar](64) NOT NULL,
[Email] [nvarchar](128) NULL,
--...
CONSTRAINT [PK_User] PRIMARY KEY NONCLUSTERED ([ID] ASC)
) ON [PRIMARY]
CREATE TABLE [dbo].[Roles](
[Role] [varchar](8) NOT NULL,
[Name] [varchar](32) NOT NULL,
[Description] [varchar](1000) NOT NULL,
[OrderNo] [tinyint] NOT NULL,
CONSTRAINT [PK_Roles] PRIMARY KEY CLUSTERED ([Role] ASC)--...
CONSTRAINT [IX_Roles] UNIQUE NONCLUSTERED ([Role] ASC)--...
) ON [PRIMARY]
CREATE TABLE [dbo].[UserRole](
[UserID] [int] NOT NULL,
[Role] [varchar](8) NOT NULL,
CONSTRAINT [PK_UserRole] PRIMARY KEY CLUSTERED ([UserID] ASC,[Role] ASC)
) ON [PRIMARY]
答案 0 :(得分:2)
这里有很多问题。我认为这个迁移文章是一个很好的起点:Migrating an Existing Website from SQL Membership to ASP.NET Identity
这可能会帮助您回答大部分问题,尤其是1,3和4。
对问题2的回答:由于ASP.NET成员身份和ASP.NET身份是两回事,我建议进行完全迁移,这意味着一旦为Identity创建了新表,就可以将外键映射到新表并摆脱ASP.NET成员资格表。
对问题5的回答:我认为这取决于您想要如何设置ASP.NET身份。在我目前正在进行的项目中,我们决定根本不使用Entity Framework,但是这会使一切变得更加复杂,因为你必须非常深入地了解发生了什么,何时,如何,为什么......所以如果你正在寻找为了便于实现,使用EF它可以让生活变得更加轻松,你会在互联网上找到大量的代码示例。
对问题6的回答:如果不使用异步,则不会引起问题。唯一的缺点是你不会从中受益......
对问题7的回答:Microsoft不建议激活多个身份验证系统。在我目前正在进行的项目中,我们设法将Identity和Azure AD身份验证协同工作,但我们必须开发自己的中间件并不是那么容易。在我们的web.config中,我们有:
<system.web>
...
<authentication mode="None" />
...
</system.web>