通过 Apache Camel 调用 NTLM 安全端点

问题描述 投票:0回答:1

我正在创建以下路由,它使用 NTLM 身份验证,但始终返回 401 并出现以下错误

from("direct:start")
    .setHeader(Exchange.HTTP_METHOD, () -> "GET")
    .setHeader(Exchange.HTTP_URI, () -> "https://www.test.com")
    .to("http://host" +
    "?authMethodPriority=NTLM" +
    "&authMethod=NTLM" +
    "&authUsername=user" +
    "&authPassword=pass")
    .log("Response: ${body}");

错误堆栈

2024-05-20T12:06:11.556-03:00  WARN 24517 --- [pocs] [           main] 
o.a.h.c.h.impl.auth.HttpAuthenticator    : ex-0000000001 Negotiate{FAILED } 
authentication error: No valid credentials provided (Mechanism level: No valid 
credentials provided (Mechanism level: Failed to find any Kerberos tgt))

对于使用 NTLM 的路线有什么建议吗?

我尝试使用 'authMethod' = NTLM 但没有成功

apache-camel ntlm ntlm-authentication camel-http
1个回答
0
投票

您需要创建一个

bean
并将该 bean 作为调用的
clientBuilder
参数。比如这样

Bean 代码

@Bean(name = "httpClientBuilder")
public HttpClientBuilder httpClientBuilder() {
    CredentialsProvider credsProvider = new BasicCredentialsProvider();
    credsProvider.setCredentials(AuthScope.ANY, new NTCredentials(ntlmUsername, ntlmPassword, "", ""));
    HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();
    httpClientBuilder.setDefaultCredentialsProvider(credsProvider);

    return httpClientBuilder;
}

注意,您必须将实际凭据放在那里,如果您需要域,还可以替换

""
构造函数中的
NTCredentials

路线:

from("direct:start")
    .setHeader(Exchange.HTTP_METHOD, () -> "GET")
    .setHeader(Exchange.HTTP_URI, () -> "https://www.test.com")
    .to("http://host" +
    "?clientBuilder=#httpClientBuilder")
    .log("Response: ${body}");

使用

#httpClientBuilder
,您可以通过名称引用 bean。

© www.soinside.com 2019 - 2024. All rights reserved.