一尘不染

简单的SSO-使用自定义身份验证-CAS或某些Oauth或OpenID服务器?

java

我想了解更多有关解决Single Sign-
On的不同方法及其优缺点。您是否使用过一种特定的解决方案,请告诉我该解决方案有什么好处,并告诉我哪些限制或次优部分是什么。

以下是我想了解或不了解的详细信息。

Wikipedia中所列, SSO是一个巨大的话题。我学得越多,我就有更多的问题。

首先,我不了解
CAS
令牌验证的必要性,这有什么好处?

它更安全吗? 我猜它很容易受到中间人攻击。客户也应该使用ssl吗?

让我们现实起来,这是我们的需求: 如果已经在我们的一个应用程序上登录,则自动识别/登录用户。

(我们有许多用不同语言编写的Web应用程序)

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

你会怎么做?

  • CAS?
  • Openid?我可以使用它进行集中身份验证吗?
  • 其他?还是具有OAuth的服务器?

在客户端,您会使用Lightframe之类的iframe来显示重定向的页面吗?为什么/为什么不呢?


与SSO相关的另一个问题: Saml 经常(错误地)混入SSO讨论中-如果我这么说,我是否理解?

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



阅读 348

收藏
2020-12-03

共1个答案

一尘不染

Oauth旨在对应用程序进行身份验证,以使它们以用户的名义行事。例如,推特客户端可以使用用户帐户发布推文。如Facebook所示,它可用于单点登录,但这需要一些额外的工作。

比较CAS和OpenID

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

OpenID具有两个(不兼容)标准,以提供有关帐户的 其他属性 ,公共库或多或少地支持这些 属性
。在标准设置中,CAS仅提供用户名。虽然CAS在理论上确实支持属性交换,但是目前只有PHP客户端支持它

OpenID和CAS都可以 自动登录
。如果用户已经登录,浏览器将立即重定向回您的应用程序。但是,在简单的设置中,如果用户未登录,身份提供者将显示一个登录页面。因此,如果您希望允许匿名访问您的身边,则需要人们单击专用的登录链接。

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

CAS支持 单点注销 。OpenID没有。

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

答案

首先,我不了解CAS令牌验证的必要性,这有什么好处?

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

客户也应该使用ssl吗?

是。

在客户端,您会使用Lightframe之类的iframe来显示重定向的页面吗?为什么/为什么不呢?

屏幕重定向 是最简单的事。我将从此开始使其工作。无论如何,许多应用程序仍然需要在登录后重新加载当前页面,以显示仅对登录用户可见的部分。

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

2020-12-03