【发布时间】:2016-07-28 20:08:39
【问题描述】:
我们有一个使用 FormsAuthentication 的 ASP.NET/MVC 网站。像往常一样,当用户尝试访问一个页面并且没有有效的 FormsAuthentication cookie 时,IIS 会将他重定向到登录视图。当用户对登录控制器执行 HttpPost 时,我们的控制器操作会调用我们的 WebApi Web 服务,该服务根据 Sql Server 数据库验证用户名、密码和客户 ID。如果身份验证通过,控制器操作会设置 FormsAuthentication cookie,并重定向到用户请求的页面。
现在,销售人员正在宣传“单点登录”,尽管我不清楚他们的确切含义。据我所知,在 Microsoft World 中,这通常意味着访问 MS 的 Active Directory 联合服务。
此时我几乎不知道这将如何工作,但在我深入研究之前,是否可以将身份验证代码放在 WebApi Web 服务中,我们可以选择针对 Sql Server 数据库进行验证,还是针对适合指定客户的任何 ADFS 服务器?
我们的问题是我们有我不知道有多少成千上万的用户,为数百个客户工作。许多客户不会运行 ADFS,而那些运行的客户将各自拥有自己的 ADFS 服务器。
我看到的关于单点登录的大部分内容似乎都涉及将浏览器重定向到 ADFS 服务器,然后重定向回来,如果您已经登录,则看起来完全避免登录。我没有在我们的情况下,我们认为我们可以做到这一点。在我们访问数据库之前,我们无法知道要重定向到哪个 ADFS 服务器。
那么问题来了 - 是否可以完全通过我们的 WebAPI Web 服务中的 C# 代码进行 ADFS 身份验证?
(一种可能的复杂情况 - 网站本身对任何数据库的访问权限为零。其 web.config 中的唯一配置设置是 web 服务的基本 URL。无论发生什么身份验证都必须在 web 服务中进行,而不是在网站中进行。 )
【问题讨论】:
-
总是在对 SSO 的方式和内容有疑问时,请考虑一下 Google 生态系统。您访问他们的任何应用程序,您将被重定向到另一个应用程序的登录页面,然后使用经过身份验证的用户信息重定向回来。这种分离允许身份提供者引入新功能(如两因素身份验证),而不会打扰所有使用身份提供者的应用程序。而且,并非如此,Microsoft 世界中的 SSO 与 ADFS 无关。这只是其中一种选择。
标签: c# asp.net-mvc asp.net-web-api adfs