我在网上看到过很多类似的页面,但大多数都使用新项目而不是现有项目,或者没有必要的功能 . 所以,我有一个现有的 MVC 5
项目,并希望集成 ASP.NET MVC5 Identity with log in, email confirmation and password reset 功能 .
除此之外,我还需要在数据库上创建所有 necessary tables ,即用户,角色,组等(我在我的项目中使用EF Code First) . 是否有符合这些需求的文章或样本?任何建议将不胜感激 . 提前致谢...
3 回答
为现有项目配置标识并不困难 . 您必须安装一些NuGet包并进行一些小配置 .
首先在Package Manager Console中安装这些NuGet包:
添加用户类并使用
IdentityUser
继承:为角色做同样的事情:
将您的
DbContext
父表单DbContext
更改为IdentityDbContext<AppUser>
,如下所示:如果使用相同的连接字符串并启用了迁移,EF将为您创建必要的表 .
(可选)您可以扩展
UserManager
以添加所需的配置和自定义:由于Identity基于OWIN,因此您还需要配置OWIN:
将类添加到
App_Start
文件夹(如果需要,可以添加到其他任何位置) . 该类由OWIN使用几乎只需将这行代码添加到
web.config
文件中,以便OWIN可以找到您的启动类 .现在在整个项目中,您可以使用Identity,就像VS已经安装了新项目一样 . 例如,考虑登录操作
您可以创建角色并添加到您的用户:
您可以向任何用户添加任何角色,如下所示:
通过使用
Authorize
,您可以保护您的操作或控制器:要么
您还可以安装其他软件包并配置它们以满足您的要求,例如
Microsoft.Owin.Security.Facebook
或您想要的任何一个 .Note: 不要忘记在文件中添加相关的命名空间:
您还可以看到我的其他答案,如this和this,以便高级使用Identity .
这就是我将Identity与现有数据库集成的方法 .
使用MVC模板创建示例MVC项目 . 这包含Identity实现所需的所有代码 - Startup.Auth.cs,IdentityConfig.cs,Account Controller代码,Manage Controller,Models和相关视图 .
为Identity和OWIN安装必要的nuget包 . 通过查看示例项目中的引用和@Sam的答案,您将获得一个想法
将所有这些代码复制到现有项目中 . 请注意,不要忘记为Identity添加“DefaultConnection”连接字符串以映射到您的数据库 . 请检查IdentityModel.cs中的ApplicationDBContext类,您将在其中找到对“DefaultConnection”连接字符串的引用 .
这是我在现有数据库上运行的SQL脚本,用于创建必要的表:
我推荐IdentityServer . 这是一个.NET Foundation项目,涉及许多有关身份验证和授权的问题 .
概述
IdentityServer是一个基于.NET / Katana的框架和托管组件,允许使用OpenID Connect和OAuth2等协议为现代Web应用程序和API实现单点登录和访问控制 . 它支持广泛的客户端,如移动,Web,SPA和桌面应用程序,并且可扩展以允许集成到新的和现有的体系结构中 .
有关详细信息,例如
支持MembershipReboot和基于ASP.NET身份的用户存储
支持额外的Katana身份验证中间件(例如Google,Twitter,Facebook等)
支持基于EntityFramework的持久性配置
支持WS-Federation
可扩展性
看看documentation和samples .