ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

使用SSPI从Windows上运行的Java应用程序获取SSO

2019-12-09 06:03:01  阅读:331  来源: 互联网

标签:jaas kerberos windows java


我有一个运行在Windows上的Java应用程序,该应用程序需要使用Kerberos / SPNEGO验证到Web应用程序.我知道如何配置JAAS来实现此目的,但是我发现Java(JDK6和JDK7beta)Kerberos实施缺少我需要的几个重要功能.例如,支持引用或使用DNS确定主机的领域(我有一个多领域环境).

是否存在可以使用Windows本机SSPI实施身份验证的第三方模块?我们已经遇到了将Windows客户端配置为在我们的环境中工作的麻烦,不必为Java再次执行该操作就很好了.我知道Waffle及其WindowsLoginModule,但它似乎没有执行SSO,因为它要求用户将其凭据重新输入到应用程序中.

解决方法:

我们有一个类似的问题.我们的主要问题是,使用Windows UAC时,GSS-API实现失败,而我们使用Waffle解决了该问题.

Waffle基本上是对SSPI的JNA调用的包装.我们通过覆盖类sun.net.www.protocol.http.NegotiatorImpl设法使用Waffle实现SSO:

package sun.net.www.protocol.http;

import java.io.IOException;
import waffle.windows.auth.impl.WindowsSecurityContextImpl;

public class NegotiatorImpl extends Negotiator {

private String serviceName;

public NegotiatorImpl(HttpCallerInfo hci) throws IOException {
    this.serviceName = "HTTP/" + hci.host.toLowerCase();
}

    @Override
    public byte[] firstToken() throws IOException {
        return WindowsSecurityContextImpl.getCurrent("Negotiate", serviceName).getToken();
    }

    @Override
    public byte[] nextToken(byte[] in) throws IOException {
        return new byte[0];
    }
}

然后,您可以仅持有该类来创建JAR,然后将其与Waffle& JVM的./jre/lib/认可的JNA JAR.使用JVM的Java Endorsed Standards Override Mechanism,它将替换JVM的默认协商器实现.

标签:jaas,kerberos,windows,java
来源: https://codeday.me/bug/20191209/2096987.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有