小编Hen*_*rik的帖子

Java SPNEGO身份验证和Kerberos约束委派(KCD)到后端服务

我有一个Java Web应用程序,可以在Windows Active Directory环境中对客户端进行SPNEGO身份验证。为了验证用户身份,我们使用了很好的旧SPNEGO SourceForge项目中的代码。

String encodedAuthToken = (String) credentials;
LOG.debug("Encoded auth token: " + encodedAuthToken);
byte[] authToken = B64Code.decode(encodedAuthToken);
GSSManager manager = GSSManager.getInstance();

try {
    Oid krb5Oid = new Oid("1.3.6.1.5.5.2");
    GSSName gssName = manager.createName(_targetName, null);
    GSSCredential serverCreds = manager.createCredential(gssName, GSSCredential.INDEFINITE_LIFETIME, krb5Oid, GSSCredential.INITIATE_AND_ACCEPT);
    GSSContext gContext = manager.createContext(serverCreds);

    if (gContext != null) { 
        while (!gContext.isEstablished()) {
            authToken = gContext.acceptSecContext(authToken, 0, authToken.length);
        }
        if (gContext.isEstablished()) {
            // Login succeeded!
            String clientName = gContext.getSrcName().toString();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

身份验证效果很好,但我们还需要使用约束委派将用户凭据委派给后端服务(Exchange EWS)。在我们的广告中配置此功能时,看起来差别很小,但不是。请参阅: AD委托设置

此处描述了差异:msdn.microsoft.com/zh-cn/library/cc246080.aspx?f=255&MSPPError=-2147217396使用不受约束的委派,我们可以在调用后端服务时简单地使用可用的委派凭据,并且它将一切都很好:

GSSCredential delegatedCreds …
Run Code Online (Sandbox Code Playgroud)

java kerberos delegation

4
推荐指数
2
解决办法
1757
查看次数

标签 统计

delegation ×1

java ×1

kerberos ×1