我们有一个使用FormsAuthentication的ASP.NET / MVC网站。通常,当用户尝试访问页面并且没有有效的FormsAuthentication cookie时,IIS会将其重定向到登录视图。当用户对登录控制器执行HttpPost时,我们的控制器操作会调用我们的WebApi Web服务,该服务根据Sql Server数据库验证用户名,密码和customerid。如果身份验证通过,则控制器操作会设置FormsAuthentication cookie,并重定向到用户要求的页面。
现在销售人员正在发出关于"单点登录"的声音,尽管我并不清楚它们究竟是什么意思。根据我的阅读,在Microsoft World中,这通常意味着访问MS的Active Directory联合身份验证服务。
此时我几乎不知道这是如何工作的,但在深入研究之前,是否可以将身份验证代码放在WebApi Web服务中,我们可以选择针对Sql Server数据库进行验证,或针对指定客户的ADFS服务器?
我们的问题是,我们不知道有成千上万的用户,为数百名客户工作。许多客户不会运行ADFS,而且每个客户都会拥有自己的ADFS服务器。
我看到的关于Single Sign-On的大部分内容似乎都涉及将浏览器重定向到ADFS服务器,然后重定向,并且如果您已经登录,则看起来完全避免登录.I在我们的案例中,我们认为我们无法做到这一点。在我们访问数据库之前,我们无法知道要重定向到哪个ADFS服务器。
那么,问题是 - 是否可以完全从我们的WebAPI Web服务中的C#代码进行ADFS身份验证?
(一种可能的复杂情况 - 网站本身无法访问任何数据库。其web.config中的唯一配置设置是webservice的基本URL。无论身份验证发生在Web服务中,而不是在网站中。 )
答案 0 :(得分:1)
首先,“单点登录”(SSO)不仅限于ADFS。它只是意味着您只键入一次凭据,然后您访问的所有系统都会自动“识别”您;所有后续授权请求都是透明的。例如,如果您的公司Intranet(同一AD域)中有多个使用Windows身份验证的网站,则您有SSO:您在登录计算机时进行一次身份验证,然后您的Web浏览器使用NTLM自动对这些网站进行身份验证或Kerberos。在这种情况下没有ADFS。
ADFS(以及“联邦”更普遍)允许的是SSO跨越安全边界。在Windows世界中,安全区域通常由Active Directory林创建;可以使用Windows身份验证提供的SSO访问此林中的所有内容。但是一旦你离开这个区域(SaaS应用程序,另一个公司网络中的网站),你需要另一个身份验证协议来执行SSO,这些协议在ADFS中实现。
然后关于你的特定问题:
完全从我们的WebAPI中的C#代码进行ADFS身份验证
您可以在服务中“重新实施”ADFS,但如果您这样做,则不会获得SSO。使用联合时,将用户重定向到其公司的ADFS服务器。此ADFS服务器与其计算机位于同一域中,因此用户可在此处获取SSO。如果您自己对自己进行身份验证,则您的用户再次无法获得SSO,因为您的用户与您的网站不在同一安全区域。
答案 1 :(得分:1)
在向多个身份提供商进行身份验证时,通常会重定向到your own STS。因此,在这种情况下,您可以将www.yourapp.com重定向到sts.yourapp.com,该网站会重定向到sts.somecustomer.com。
启用此类数据流的具体工具是home realm parameter (whr
)和AD FS Powershell API(允许IDP维护)。
您的RP-STS充当应用程序的信任点,并管理相应IDP的选择。一个RP-STS,许多IP-STS。您的每个客户的IP-STS都被设置为AD FS中的声明提供商信任。
与往常一样,维托里奥已经covered the subject比我更好了。