有几天我一直在努力研究ASP.NET中的单点登录机制,但是我仍然找不到我需要解决的问题的答案。我已经阅读了几篇关于该机制的文章(包括https://www.simple-talk.com/dotnet/asp.net/introducing-single-sign-on-to-an-existing-asp.net-mvc-application/和http://www.codeproject.com/Articles/106439/Single-Sign-On-SSO-for-cross-domain-ASP-NET-applic),但我认为我要么不能完全理解它是如何工作的,要么我正在寻找一个错误的东西。
如果我理解的话,单点登录是一种机制,允许使用单一凭据在所有连接的Web应用程序中对用户进行身份验证。但是,我需要做的是只允许应用程序A中的某些用户通过单击超链接访问应用程序B中的某些功能(因为只有一些用户在两个应用程序中都有帐户)。两个应用程序都应该有一个独立的登录机制(因为一些用户应该只能访问其中一个应用程序),但是当用户登录应用程序A并在应用程序B中拥有一个帐户时,他应该在两个应用程序中签名(不一定反过来说。)
接下来的问题是:我是否需要集中身份验证的单点登录?如果是,我怎么能只为一些用户使用它?如果有人能向我解释或提供资料,我会非常感激,在那里我可以找到更多相关信息。
答案 0 :(得分:1)
这是与OP的对话的摘要,因为它害怕被删除。
OP:
但是,我需要做的是只允许应用程序A中的某些用户通过单击超链接访问应用程序B中的某些功能(因为只有部分用户在两个应用程序中都有帐户)。两个应用程序都应该有一个独立的登录机制(因为一些用户应该只能访问其中一个应用程序),但是当用户登录应用程序A并在应用程序B中拥有一个帐户时,他应该在两个应用程序中签名(不一定反过来说。)
您是在考虑身份验证还是授权?前者确定某人是谁,而后者是他们能做什么。您可以全面使用SSO,但拒绝某些用户在某些网站上执行某些操作或完全拒绝这些内容。它并不意味着你应该混合使用SSO和非SSO
OP:
感谢您的回答。实际上,我知道差异,但我仍然有一个问题,找出解决方案。但是由于你写的东西,我想到了一件事。如果我理解正确,无论用户是否在两个应用程序中都有帐户,我都可以将其视为已通过身份验证(这意味着存储身份验证cookie),然后在应用程序内部我可以检查他是否获得了足够的权限。如果不是,例如签下他并再次重定向到登录界面,对吧?
没有问题。是的,听起来不错。
OP:
我还有一个问题。我想知道是否有一种更简单的方法,不需要使用集中式身份服务器,例如一个非常基本的跨域SSO实现模型' here。根据我在问题中所写的内容,您对该解决方案有什么看法?
我觉得净效果还可以,即用户只需登录一次;虽然我不确定执行情况。它的问题在于,单个站点现在依赖于在重定向期间可访问的其他两个站点(而不是仅仅一个SSO提供者站点)。如果一个人垮了就打破了。此外,现在所有3个网站都不得不担心提供"登录"页面,以防用户首先访问该网站(该文章假设其始终为domain1)。它有点像 ad-hoc SSO ,与你没有中央基站的ad-hoc wi-fi完全相同。
OP:
接下来的问题是:我是否需要集中身份验证的单点登录?如果是的话,我怎么才能只为一些用户使用它呢?
我认为使用单一机制的好处超过了在两个或更多应用程序中维护单独的登录工具。我不明白为什么你不能拒绝某些用户的SSO。从属站点可以轻松确定用户是使用特定于站点的帐户还是SSO帐户登录。在这两种情况下,帐户注册都可以由管理员批准,拒绝某些申请人(特别是如果它是企业)或仅仅使用网站中的授权规则。
您也可能知道,仅仅因为某个网站可以接受SSO,并不意味着它只是专门的SSO 。甚至像 StackOverflow 这样的常规网站都接受来自SO-local-accounts和SSO提供商的登录,例如 Google 和 Facebook 。