gpt4 book ai didi

c# - ASP.NET MVC/Web API 自定义身份验证

转载 作者:太空狗 更新时间:2023-10-30 01:19:25 25 4
gpt4 key购买 nike

我有 ASP.NET MVC 4/Web API 混合应用程序。身份验证由现有应用程序处理。在考虑保护这些类型的应用程序时,大多数文章都指出使用表单例份验证以及要保护的 MVC 和 API Controller /操作上的 [Authorize] 属性。我想使用 [Authorize] 属性,因为它将同时处理 MVC 路由和 API 路由,但不确定如何在没有实际表单和使用内置成员提供程序的情况下执行此操作。

我应该采用描述的简单方法吗 here ?或者我应该创建一个自定义成员身份提供程序来处理逻辑吗?

为清楚起见,工作流程如下:

  1. 用户通过现有的身份验证门户登录。
  2. 如果通过身份验证,它们将被重定向到我的应用程序以及一些其他数据,例如用户名和电子邮件(因此无需传输密码)
  3. 我的应用程序设置了一个身份验证 cookie,允许用户继续使用该应用程序。

如有任何帮助,我们将不胜感激。

最佳答案

  • 选项 1

如果您现有的登录门户正在使用表单例份验证,那么您可以在应用程序之间共享加密 key ,以便它们可以读取在登录门户中创建的身份验证 cookie:

How can I share .net (C#) based authenticated session between web forms and MVC2 applications?

  • 选项 2

如果您不在登录门户中使用表单例份验证,您可以保留现有流程,但添加一个手动创建身份验证 cookie 的步骤。这有很多变体,但是这个问题在问题中显示了更高级别的方法,在答案中显示了更低级别的方法:

How can I manually create a authentication cookie instead of the default method?

这还要求应用程序之间的加密配置相同。

  • 选项 3

否则,您只能使用 SSO 协议(protocol)进行切换。您可以为您的登录门户保留现有的身份验证过程,但需要添加额外的代码来协调 SSO 切换到其他应用程序。 SSO 的出现是因为除了上面 #1 和 2 中使用的加密 cookie 方法之外,几乎没有其他安全选项可用于执行浏览器重定向和通信身份验证。

创建您自己的基于 cookie 的方法是有风险的,并且可能会打开您无法预见的安全漏洞。

  • “我应该采用像 here 中描述的简单方法吗?”

关于该示例的重要一点是,尚不清楚用户名来自 SetAuthCookie(username, ...查询网络服务以确定该登录是否有效。在这种情况下,它不是使用专用登录门户进行单点登录,而是每个应用程序收集登录信息并询问网络 API 是否有效。在您的情况下,您不这样做想要收集每个门户中的登录信息,但检测到他们已经登录到专用登录门户。

所以问题是当您调用 SetAuthCookie(username, ... 时,登录代理如何以安全的方式告诉您 username 是什么。这正是 SSO是为了。使用 SSO 切换,一个站点可以以安全的方式告诉另一个站点“我正在向您发送 Bob123,您可以确定它确实是 Bob123 而不是其他人。

选项 #1 和 #2 通过让登录门户设置 cookie 来解决这个问题,并通过在应用程序之间共享 key ,其他应用程序可以安全地读取该 cookie。

请注意,您不能仅使用任何 cookie 来执行此操作。表单例份验证 cookie 以某种方式构建,以防止 cookie 的伪造和其他篡改。

如果您要跨域,SSO 将成为您唯一的选择,因为写在一个域中的 cookie 无法在另一个域中读取(浏览器只提交当前域的 cookie)。

有多个子域共享一个根域的表单例份验证的变通方法:

Proper creation of a cross-domain forms authentication cookie

重定向到另一个带有加密信息的站点并让该站点写入表单例份验证 cookie 的黑客攻击有很多种,但其中大多数都是可怕的黑客攻击,与 SSO 一样复杂。

关于c# - ASP.NET MVC/Web API 自定义身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22947735/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com