繁体   English   中英

asp.net MVC 5的自定义身份验证框架

[英]Custom Authentication Framework for asp.net MVC 5

我们正在为应该处理这些应用程序身份验证的多个MVC应用程序构建框架。 我们的要求是这样的:

  1. 我们有一个身份验证Web服务(这是基于肥皂的旧服务)。 框架应使用此服务对用户进行身份验证,并使用可配置的服务URL。
  2. 将来,我的组织计划实现单一登录(我们有多个用户来源-AD,数据库等),并且该框架应可配置为使用SSO。

如何在MVC 5中实现呢? 我应该使用AuthetnicationFilters吗? 在这种身份验证情况下,asp.net身份将扮演什么样的角色?

身份验证/授权非常复杂,许多用户编写的方案很容易被黑客入侵。 建议使用经过尝试和信任的框架(例如IdentityServer或OAuth)。 甚至Google都对Google+中的身份验证方案有误,因此决定完全撤消它

由于解决方案可能需要迁移到云,因此最好确保以下功能无需修改即可用于Microsoft Identity表。 尽管不能将Identity系统构建为轻松应对AspNetUsers以外的表中的表更改,但是以后可以更改它们,并且在为使Entity Framework正确运行而构造工作上下文时,您需要非常准确。

验证(如果存在,则获取用户信息(例如,如果存在,则解码用户的cookie))

质询(要求用户进行身份验证(例如,显示登录页面)

登录(将用户的信息保留在某处(例如,编写cookie)

注销(删除用户的保留信息(例如删除cookie)

禁止(对于未经身份验证的用户或经过身份验证但未经授权的用户拒绝访问资源(例如,显示“未经授权”页面)对于未经身份验证的用户或经过身份验证但未经授权的用户拒绝访问资源(例如,显示“未经授权”页面))

首先要开始的地方是Visual Studio 2017,将新项目和身份验证设置为“个人用户帐户”。 使用NuGet安装Microsoft.AspNetCore.Identity.UI,然后对实现上述功能的剃须刀页面进行脚手架(右键单击项目,然后选择添加=>新脚手架项目=>身份)。 请记住,类方法是通过在控制器中添加[Authorize]来保护的。 将此项目与不使用Identity的项目仅使用cookie进行比较。 重要的是,也许可以使用Microsoft身份使您的实现尽可能可插入(因为您将访问专门为身份生成的表),因此可以与ASP.NET,ASP.NET Core一起使用。

至少需要两个不受保护的端点才能对登录组件和将要登录和注销的应用程序中的Authenticate()方法进行访问。 登录后,可以通过共享cookie或通过Authorize标头或url中传递的令牌来访问受保护的组件。 应用程序可以从cookie /令牌中提取信息,并检查用户是否在AspNetUsers表中,并允许访问或重定向到“登录”页面或“拒绝访问”页面。 登录中的Authenticate()方法需要创建一个cookie或令牌(或两者)。 应用程序中的Authenticate()方法需要读取和验证此信息。 Microsoft Identity支持以下方案,因此请选择。

饼干

Facebook的

谷歌

内部

JwtBearer

微软帐户

OAuth的

OpenIdConnect

推特

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM