没有Windows登录的富客户端(“胖客户端”)的单点登录

时间:2012-08-18 14:32:26

标签: single-sign-on kerberos saml fat-client

Web应用程序的单点登录(SSO)(通过浏览器使用)已有详细记录和建立。为富客户端建立SSO更加困难,通常建议使用Kerberos票证,特别是使用Windows登录域中的ActiveDirectory。

但是,我正在寻找以下更通用的解决方案:我需要建立“真正的”SSO(所有应用程序的一个标识,即不仅仅是跨应用程序的密码同步),在客户端(非托管计算机) ,包括非Windows),“终端客户端”是Java应用程序和GTK +应用程序。两者都使用基于HTTP的协议(例如,通过HTTPS的Web服务)与其服务器对应方进行通信。客户端和服务器不一定位于同一LAN / Intranet中,但客户端可以从外部网访问服务器。所有应用程序的服务器端都位于同一网络区域,SSO组件可以通过LDAP访问身份提供程序。

我的问题基本上是“我怎么能这样做”?更具体地说,

a)是否存在一个商定的机制,用于安全,受保护的客户端“sso会话存储”,因为浏览器访问的应用程序的SSO cookie就是这种情况?可能是模拟Kerberos(TGT?)甚至直接重用它,即使客户端没有执行ActiveDirectory身份验证?

b)富客户端与SSO的其他参与者之间的通信是否存在任何协议/ API /框架(如cookie的情况)?

c)是否有任何API /框架可以通过网络推送类似kerberos的TGT和会话门票?

d)是否有可用的示例实现/教程演示如何执行富客户端SSO?

我知道有“填充”代理可以学习将凭据输入客户端的应用程序对话框中。如果可能的话,我宁愿不要使用这样的“助手”。

另外,如果可能的话,我想尽可能使用CAS,Shibboleth和其他开源组件。

感谢您提出意见,建议和解答!

三苦

2 个答案:

答案 0 :(得分:1)

使用AD帐户是通用解决方案。 Kerberos无处不在。这是唯一一种会在登录时向您询问一次凭证的机制。

这是可行的,你需要:

  1. A KDC
  2. 更正DNS条目
  3. KDC帐户
  4. 更正SPN条目
  5. 配置为与KDC通信的客户端计算机
  6. 使用JAAS和JGSS获取服务票据的Java应用程序
  7. GSS-API与您的GTK +应用程序一起获取服务票据
  8. 你自己弄明白了什么?

答案 1 :(得分:0)

同意Michael的观点,GSSAPI / Kerberos就是您想要使用的。我要补充说,Java存在一些障碍,但是:默认情况下,JGSS使用自己的GSSAPI和Kerberos实现,在JDK中用Java编写,不是平台的库。因此,它不遵守您现有的配置,并且不像其他任何东西一样工作(例如,在Unix上它不尊重KRB5CCNAME或您习惯的其他环境变量,不能使用DNS来定位KDC,有一个不同的支持密码集等)。它也有缺陷和有限;例如,它不能跟随推荐。

在Unix平台上,您可以通过启动JVM来告诉JGSS绕过JDK代码并使用外部GSSAPI库:

-Dsun.security.jgss.native=true -Dsun.security.jgss.lib=/path/to/libgssapi_krb5.so

然而,Windows上没有类似的选项可以使用SSPI。这看起来很有希望:

http://dblock.github.com/waffle/

......但我还没有解决这个问题。