使用Java客户端进行单点登录 [英] Single Sign-On with Java Client

查看:58
本文介绍了使用Java客户端进行单点登录的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在寻找Java客户端中的单点登录身份验证。

因为我是使用AD登录到Windows的,所以主要目标是我不必再次输入用户名和密码。我想让Java使用我在Windows登录时收到的票证。此代码是我拥有的最适合此用途的代码:

LoginContext lc = new LoginContext("com.sun.security.jgss.krb5.initiate", new DialogCallbackHandler());
lc.login();
Subject.doAs(lc.getSubject(), (PrivilegedExceptionAction<Void>) () -> {
            System.out.println("This is privileged");
            return null;
        });

我已经用相应的配置文件设置了java.security.krb5.confjava.security.auth.login.config属性,但是仍然弹出要求输入用户名和密码的对话框。

我也尝试使用GSSName,但GSSManager.createCredential()还要求输入用户名和密码(可能使用TextCallbackHandler())。

我试图与Waffle相处,但没有使其正常工作。大多数示例和解释都是服务器端的(我只找到一个结合了服务器端和客户端的示例,但是我无法将其分开)。

我知道,也有类似的问题(例如this),但我没有输入密码就无法正常工作。

PS:我知道,DialogCallbackHandler已删除,我仅将其用于测试目的。

推荐答案

好的,经过几次尝试,我找到了解决方案。问题不在于代码,而在于注册表。如this页所述,从Java7开始,您不能本机访问Windows的票证。要更改此设置,您必须设置额外的注册表项。为此,请进入注册表文件夹

HKEY_LOCAL_MACHINESystemCurrentControlSetControlLsaKerberosParameters

并添加密钥

Value Name: AllowTgtSessionKey
Value Type: REG_DWORD
Value: 0x01

要使此功能完全正常工作,您需要一些其他设置:

jaas配置文件

在JAAS配置文件中,您必须设置JAAS应该使用哪些安全模块。括号前面的部件命名您的配置。如果您使用GSS库,则必须将其命名为com.sun.security.jgss.krb5.initiate。使用LoginContext时,只需将配置名称作为第一个参数传递即可。我的jaas.conf外观如下:

com.sun.security.jgss.krb5.initiate {
    com.sun.security.auth.module.Krb5LoginModule required
        useTicketCache = true;
 };

Kerberos配置

您还需要Kerberos模块的配置。这主要包含域地址,但可以包含附加信息。最小工作示例:

[realms]
    YOUR.REALM.COM = {
        kdc = your.realm.com:88
        default_domain = REALM.COM
    }

请注意,这是区分大小写的!

系统属性

最后,您必须设置Java才能找到该文件。您可以通过在启动时提供属性或通过调用System.setProperty()

来执行此操作
System.setProperty("java.security.krb5.conf", "src/resources/krb5.conf");
System.setProperty("java.security.auth.login.config", "src/resources/jaas.conf");

这篇关于使用Java客户端进行单点登录的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆