java – 简单的SSO – 使用自定义身份验证 – CAS或一些Outh或Openid服务器?

I’d like to know more about the
different ways of solving Single
Sign-On and their pros and cons. Have you worked with one particular solution, tell me what’s good about it and tell me what the limitations or suboptimal parts are.

Below
are the details of what I’d like to
know, or don’t understand.

SSO是一个很大的话题,就像listed in the wikipedia.我学到的问题越多越多。

首先,我不明白CAS的令牌验证的需要,它有什么好处?

它更安全吗?我猜这是像任何人一样容易受到中间人的袭击。客户还应该使用ssl吗?

让我们变得真实,这就是我们的需要:自动识别/登录用户,如果已经登录到我们的一个应用程序。

> my-php-app.com
> my-java-app.com
> my-ruby-app.com

(我们有很多webapps,用不同的语言编写)

我们希望(保留)我们自己的身份验证规则和用户存储,但可能会添加一些Oauth2提供程序作为Facebook连接。我们希望为用户简单的使用,并为使用它的开发人员简单。

你会怎么做?

> CAS?
> Openid?我可以集中认证吗?
>其他?还是使用OAuth的服务器?

在客户端,您是否使用iframe(如lightbox)来显示重定向页面?为什么不为甚么

另一个SSO相关问题:Saml经常(错误地)混合到SSO讨论中 – 我明白如果我说

a saml implementation would not provide
sso (autologin) when pointing the
browser to www.yetanother-myapp.com?

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

> SSO with CAS or OAuth? – 他的需要描述不是我想要的,他描述了CAS …
> OpenID as a Single Sign On option?? – 嗯,我不知道我从中学到了什么。

感谢教育我!

最佳答案
Oauth旨在认证应用程序,以使其以用户的名义行事。例如,一个twitter客户端可以发布带有用户帐户的推文。它可以用于Facebook上显示的单点登录,但这需要一些额外的工作。

比较CAS和OpenID

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

OpenID具有两个(不兼容的)标准,以提供关于该帐户的附加属性,这些属性或多或少地被公共库支持。在标准设置中,CAS只提供用户名。虽然CAS在理论上支持属性交换,但是在only the PHP client supports it

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

幸运的是,OpenID和CAS都允许透明登录尝试。在此模式下,登录表单不显示。立即使用或不使用身份验证信息将浏览器重定向回来。换句话说:您可以在访问您的网站后立即将所有新用户(无会话)重定向到身份提供者。有一个nice diagram详细解释。 CAS称之为“网关模式”,它通过将gateway = true追加到登录URL来实现。在OpenID中,它被称为“立即模式”,URL参数是openid.mode = checkid_immediate

CAS支持单点登出。 OpenID不。

我个人的经验是,CAS是非常容易设置和非常可靠的高品质的库为所有常见的编程语言。 OpenID具有许多微小的不兼容性,因为它是一个更复杂的系统。然而,OpenID允许使用Google帐户。

答案

First of all, I don’t understand the need for token verifications of CAS, what is it good for?

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

Should clients also use ssl?

是。

On the client side, would you use an iframe, like lightbox, to show the redirected page? Why/Why not?

全屏重定向是最简单的事情。我会从此开始让它工作。许多应用程序需要登录后重新加载当前页面才能显示仅对登录用户可见的部分。

一个Iframe有一个问题,一旦登录完成,你需要摆脱它。对于CAS,有一个tutorial如何将CAS登录表单直接嵌入到应用程序的HTML代码中。另一个选择是显示像Facebook Connect那样的弹出窗口。

转载注明原文:java – 简单的SSO – 使用自定义身份验证 – CAS或一些Outh或Openid服务器? - 代码日志