【发布时间】:2015-12-16 10:43:17
【问题描述】:
阅读了 lots of articles 并做出了很多错误的开始,我需要一些建议来将 Microsoft ASP.NET Identity 添加到我现有的 ASP.NET Web 窗体应用程序中。我现有的应用程序和典型的示例之间有很多细微的差异,我不知道如何开始。以下是关于我现有应用程序的一些要点:
- 它是一个 ASP.NET Web 窗体应用程序 (.NET Framework 4.6),已经发展了大约 4-5 年
- 它通过实体框架使用 SQL Server 数据库(不是代码优先,而是数据库优先)。该数据库早于 Web 应用程序,并且基于 10 年前的设计。但是,它确实具有良好的表关系等。
- 我的用户和角色数据库架构未按照“ASP.NET Identity / EntityFramework”进行结构化。它有一个带有
ID int PK的 [User] 表,没有用户名(因此)、密码、名字、姓氏、电子邮件和其他一些属性。它还有一个 Roles 表(4-5 个条目)和一个提供多对多关系的 UserRoles 表。除了 User 表上的属性之外,没有其他“声明”。 - 现有登录基于输入用户 ID(主键)和密码,然后根据用户表检查并成功登录(存储过程),然后将详细信息存储在 Session 中 - 这本身并不完全对!
- 虽然使用实体框架,但连接字符串是在运行时基于
web.config中的模板连接字符串形成的(基本上,数据库名称和服务器实例名称是动态填充的)
以下是我提出的一些障碍、问题和疑问。对于以下任何问题的任何建议将不胜感激:
- 当我的 Web 应用程序没有“User.Username”时,我应该使用“User.Username”吗?我应该使用电子邮件地址还是用户 ID?不幸的是,电子邮件地址在现有的 [User] 数据集中并不是唯一的。我应该使用我的 (int) UserID 的字符串版本吗?
- 是否应允许 ASP.NET Identity 将其自己的代码优先表设置到我自己的数据库中,然后将映射添加到我的旧 [User] 表?
- 如何注入“解析器”以向现有的 ASP.NET 标识数据存储/数据访问层提供(动态生成的)连接字符串?
- 我可能需要替换多少 Store 类?
- 我了解到,不使用 ORM/EntityFramework 会提供非常低效的数据访问。这是否意味着如果实现我自己的存储类,我不能简单地使用我现有的一些存储过程?
- 我的 Web 表单应用程序没有使用任何
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]
【问题讨论】:
-
你这里有 7 个问题,我觉得你的问题太宽泛了。
-
@DavidG:你说得对,一个 SO 线程有多个问题。我不确定如何解决这个问题,因为它是许多不同事物的组合,使我转换为 ASP.NET Identity 变得如此复杂。我将重新考虑如何向社区提出这个问题。干杯。
标签: c# entity-framework webforms asp.net-identity