使用自定义验证

我想更多地了解解决单点登录的不同方式及其利弊。 你是否与一个特定的解决方案合作,告诉我它有什么好处,并告诉我什么是局限性或不理想的部分。

以下是我想知道或不明白的细节。

SSO是一个巨大的主题,如维基百科中所列。 我越学越多的问题。

首先,我不明白需要对CAS进行标记验证,有什么好处?

它更安全吗? 我想它很容易受到像任何人一样的中间人攻击。 客户是否也应该使用ssl?

让我们变得真实,这是我们的需求:如果已经在我们的某个应用程序中登录,自动识别/登录用户。

  • my-php-app.com
  • my-java-app.com
  • my-ruby-app.com
  • (我们有很多webapps,用不同的语言编写)

    我们希望(保留)我们自己的身份验证规则和用户存储,但可能会添加一些Oauth2提供程序,如facebook-connect。 我们希望它对用户来说很简单,对于使用它的开发者来说也很简单。

    你会怎么做?

  • CAS?
  • OpenID的? 我可以使用它进行集中认证吗?
  • 其他? 或使用OAuth的服务器?
  • 在客户端,你会使用像lightbox这样的iframe来显示重定向的页面吗? 为什么/为什么不?


    还有一个与SSO有关的问题: Saml经常(错误地)混合到SSO讨论中 - 我明白如果我说

    将浏览器指向www.yetanother-myapp.com时,saml实现不会提供sso(自动登录)?


    我所研究的一些相关的SO问题:

  • 与CAS或OAuth的SSO? - 他的需求描述不是我想要的,他描述了CAS ...
  • OpenID作为单一登录选项? - 好吧,我不确定我从中学到了什么。
  • 谢谢你教育我!


    Oauth旨在验证应用程序,让他们以用户的名义行事。 例如,Twitter客户可以用用户的帐户发布推文。 它可以用于Facebook显示的单点登录,但这需要一些额外的工作。

    比较CAS和OpenID

    CAS是一个拥有一个账户权限的中央系统 。 OpenID是一个分布式系统 ,基本上任何人都可以设置身份提供者。 当然,你可以限制你的消费者只接受你自己的身份提供者。

    OpenID有两个(不兼容)标准来提供有关该帐户的附加属性 ,这些属性或多或少受到公共库的支持。 在标准设置中,CAS仅提供用户名。 尽管CAS在理论上支持属性交换,但目前只有PHP客户端支持它。

    OpenID和CAS都可以自动登录 。 如果用户已经登录,浏览器将立即重定向回您的应用程序。 然而,在一个简单的设置中,如果用户没有登录,身份提供者将显示一个登录页面。因此,如果你想允许匿名访问你的一方,这将需要人们点击一个专门的登录链接。

    幸运的是,OpenID和CAS都允许透明的登录尝试 。 在这种模式下,登录表单不显示。 浏览器会立即重定向,不管有没有身份验证信息。 换句话说:您只要访问您的网站,就可以将所有新用户(无会话)重定向到身份提供商。 有一个很好的图解释了这一点。 CAS将其称为“网关模式”,并通过将网关= true附加到登录URL来实现。 在OpenID中,它被称为“即时模式”,URL参数是openid.mode = checkid_immediate

    CAS支持单点登出 。 OpenID不。

    我个人的经验是CAS非常容易设置,并且对于所有常见编程语言的高质量库非常可靠。 OpenID有很多小的不兼容性,因为它是一个更复杂的系统。 但是,OpenID允许使用Google帐户。

    答案

    首先,我不明白需要对CAS进行标记验证,有什么好处?

    OpenID和CAS都要求你让身份提供者验证提供的令牌。 否则攻击者可能能够创建自己的令牌或使用用户在注销之前创建的令牌。

    客户是否也应该使用ssl?

    是。

    在客户端,你会使用像lightbox这样的iframe来显示重定向的页面吗? 为什么/为什么不?

    全屏重定向是最简单的事情。 我会开始与它开始工作。 许多应用程序无论如何都需要在登录后重新加载当前页面,以显示仅对登录用户可见的部分。

    Iframe有问题,您需要在登录完成后摆脱它。 对于CAS,有一篇教程介绍如何直接将 CAS登录表单嵌入到应用程序的HTML代码中。 另一种方法是显示Facebook Connect这样的弹出式窗口。


    我可以回答一些关于CAS的问题,因为我曾经使用过它们。 我没有使用OAuth的经验,因此不会评论它。

    首先,我不明白需要对CAS进行标记验证,有什么好处?

    CAS用于SSO目的。 当您有多个应用程序(不同顶级域名(TLD)上的桌面应用程序/ webapps)想要从单一来源进行身份验证时使用它。

    它更安全吗? 我注意到它是基于重定向的,因此同样受到中间人攻击,就像没有额外令牌验证步骤的“自定义”auth服务器一样。 我错过了CAS中的安全性吗?

    身份验证服务器使用SSL来防止MitM攻击。 但是我不明白这是SSO / CAS特定的问题,因为即使应用程序正在执行自己的身份验证,您也会遇到同样的问题。 也许你可以告诉我们在CAS设置中你担心什么样的MitM攻击

    令牌的目的是提供单一注销和/或超时? (我们不需要它,我们的用户会讨厌我们)。我一直在研究CAS,因为有一些很棒的Ruby实现,但我不确定这是我们需要的。

    令牌只是应用程序在没有密码的情况下对您进行身份验证的一种方式。 它们是与您的用户凭证关联的短期寿命/单次使用令牌。 应用程序将令牌提供给CAS服务器,并且CAS服务器回复一个凭证(如果有)与凭证相关联。 单点登出和超时是可能的,但并不直接绑定到令牌。

    我希望这很清楚。 我试图让它成为高层次的解释。 如果有任何不清楚的部分,或者您想了解更多细节,请随时索要具体信息。

    编辑:我发现一个更好的简单解释CAS如何在http://www.jasig.org/cas/proxy-authentication(页面的其余部分谈到代理身份验证。这是更复杂的,但前几个段落是我们在这里讨论的简单情况)

    我去我的门户实例。 它将我重定向到CAS登录。 CAS检测到我的安全cookie并执行单一登录,因此我不必再次输入用户名和密码。 CAS将我重定向回门户。 门户验证票证,将我登录到门户网站我看到我的默认布局填充了一些很酷的频道,告诉我外面真的很冷,以及新闻里有什么。

    请注意,该门户网站没有得到我的密码。


    这是基于我的经验:SSO(单点登录)涉及两种情况: - 我)我非常了解你(涉及两方)ii)嘿,朋友,见我的朋友(涉及三方)

    因此,第二种情况需要重定向/转发机制,因为通常第三方只是集中式认证/授权服务。

    现在,实施方面,SSO需要评估两个领域: -

    a)不同的参与方/系统(无论组织内部/外部)是如何管理用户凭证的。 这称为身份管理。

    b)SSO信息如何在各方之间流动? Ofcouse在大多数情况下都很安全。

    我认为身份管理比确定如何传递信息更加重要,因为后者有许多可用的加密/解密技术。 在一套启用SSO的系统中,这是非常不同的管理。

    现在,身份管理可以通过简单的用户ID(如果所有参与系统都可用)或内部开发的XML内容或SAML有效负载或第三方令牌来实现。 我认为令牌只是一个通用术语,指的是以安全方式包含用户凭证的容器,以及有关执行的一些安全程序的信息。

    @Ole,上面讲述了SSO的基本知识(从我的角度),我认为你应该更多地关注用户及其角色在多个系统上的识别方式,例如:你的用户存储,打开outh2提供者; 所以更多地考虑身份管理。

    一种解决方案可能(取决于您的预算和时间),您的企业可以花费精力在标准集成技术(例如Web服务)的形式下创建内部集中认证接口,并且在这些API的后面,您可以有任何实现:您自己的提供商或第三方oAuth或两者兼而有之。 您可以在作为决策者的API和提供者层之间实现引擎层。 例如,引擎可以具有应用程序域和相应的auth提供程序映射。 这样你就可以为所有的客户端提供统一的认证接口。

    客户端 - >内部集中式API - >引擎 - > Auth提供者让我举个例子: - i)你可以暴露一个Web服务,名字可以是singleSigonService。 XML有效载荷可能如下所示: -

    <SingleSignOnReqType>   <sourceID>XYZ</sourceID>    <source-domain>my-java-app.com</source-domain>  <user-credentials>...</<user-credentials>
            <security-credentials>...</<security-credentials> </SingleSignOnReqType>
    

    ii)Web服务客户端会对集中式引擎层(在任何技术中实现)进行SSO调用,这可能会进行验证和簿记,并且可能基于源域(例如my-java-app.com)在传入的XML会将请求委托给Oauth2提供者,如facebook-connect。 因此,您的引擎(决策者)会像您在要求中提到的那样管理身份验证规则。

    所以基本上所有的消费者应用程序都将有一个统一的基于Web服务的接口到您的SSO解决方案。这就是我所说的内部集中式API。

    链接地址: http://www.djcxy.com/p/47967.html

    上一篇: using custom authentication

    下一篇: Google Sheets java sdk oAuth unauthorized after some hours (spring boot)