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和其他开源组件。
感谢您提出意见,建议和解答!
三苦
答案 0 :(得分:1)
使用AD帐户是通用解决方案。 Kerberos无处不在。这是唯一一种会在登录时向您询问一次凭证的机制。
这是可行的,你需要:
你自己弄明白了什么?
答案 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/
......但我还没有解决这个问题。