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

本文关键字:自定义 身份验证 框架 net MVC asp | 更新日期: 2023-09-27 18:31:59

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

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

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

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

身份验证/授权非常复杂,许多用户编写的方案很容易被黑客入侵。使用经过尝试和信任的框架(例如IdentityServer或OAuth)会变得很糟糕。甚至谷歌在Google+中的身份验证方案上也犯了错误,并决定将其完全拉出。

由于解决方案可能需要迁移到云,因此最好确保以下功能适用于Microsoft标识表,而无需修改。尽管标识系统不是为了轻松处理 AspNetUsers 以外的表中的表更改而构建的,但以后可以更改它们,并且您需要非常准确地构造工作上下文,以使实体框架正常运行。

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

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

登录(将

用户的信息保留在某个位置(例如,写入 Cookie)

注销(删除用户的持久信息(例如删除 Cookie)

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

对于未经身份验证的用户或经过身份验证但未经授权的用户(例如显示"未授权"页面))

一个开始的地方是Visual Studio 2017,其中新项目和身份验证设置为个人用户帐户。使用 NuGet 安装 Microsoft.AspNetCore.Identity.UI,然后搭建实现上述功能的剃刀页面的基架(右舔项目并选择"添加 => 新建基架项 => 标识")。请记住,类方法通过在控制器中添加 [授权] 来保护。将此项目与仅使用 cookie 的没有标识的项目进行比较。重要的是使您的实现尽可能可插拔,也许可以使用Microsoft Identity(因为您将访问专门为Identity生成的表),因此将与 ASP.NET,ASP.NET Core一起使用。

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

饼干

脸书

谷歌

内部

智汤逊承载者

微软帐户

OAuth

OpenIdConnect