Created 07-13-2017 06:44 AM
I have a spring-data-solr web service that was running fine before we enabled kerberos security on our cluster.
Below is the config portion of my code:
@Configuration
@EnableSolrRepositories(basePackages = { "org.nccourts.civil.repository" }, multicoreSupport = true)
public class IdentitySearchWsConfig {
@Value("${spring.data.solr.zk-host}")
private String zkHost;
@Bean
public CloudSolrClient solrClient() {
return new CloudSolrClient(zkHost);
}
@Bean
public SolrTemplate solrTemplate(CloudSolrClient solrClient) throws Exception {
solrClient.setDefaultCollection("party_name");
return new SolrTemplate(solrClient);
}
}
The way I start my webservice is as follows:
java -Djava.security.auth.login.config=/iapima/jaas.conf -jar identity-search-hadoop-ws-dev-0.1.0-run.jar
Where the jaas.conf file points to my keytab file.
The web service runs without error, however, when I try to query my collection, I am getting the following error:
This request requires HTTP authentication.
Below is the full stack. Any pointer or help is truly appreciated.
2017-07-11 17:18:04.109 INFO 9592 --- [ourts.org:2181)] org.apache.zookeeper.Login : successfully logged in.
2017-07-11 17:18:04.121 INFO 9592 --- [ourts.org:2181)] o.a.z.client.ZooKeeperSaslClient : Client will use GSSAPI as SASL mechanism.
2017-07-11 17:18:04.126 INFO 9592 --- [ Thread-21] org.apache.zookeeper.Login : TGT refresh thread started.
2017-07-11 17:18:04.162 INFO 9592 --- [ Thread-21] org.apache.zookeeper.Login : TGT valid starting at: Tue Jul 11 17:18:04 EDT 2017
2017-07-11 17:18:04.163 INFO 9592 --- [ Thread-21] org.apache.zookeeper.Login : TGT expires: Wed Jul 12 03:18:04 EDT 2017
2017-07-11 17:18:04.174 INFO 9592 --- [ Thread-21] org.apache.zookeeper.Login : TGT refresh sleeping until: Wed Jul 12 01:40:02 EDT 2017
2017-07-11 17:18:04.177 INFO 9592 --- [ourts.org:2181)] org.apache.zookeeper.ClientCnxn : Opening socket connection to server dwh-mst-prd01.stor.nccourts.org/10.91.61.101:2181. Will attempt
to SASL-authenticate using Login Context section 'Client'
2017-07-11 17:18:04.180 INFO 9592 --- [ourts.org:2181)] org.apache.zookeeper.ClientCnxn : Socket connection established to dwh-mst-prd01.stor.nccourts.org/10.91.61.101:2181, initiating sessi
on
2017-07-11 17:18:04.206 INFO 9592 --- [ourts.org:2181)] org.apache.zookeeper.ClientCnxn : Session establishment complete on server dwh-mst-prd01.stor.nccourts.org/10.91.61.101:2181, sessioni
d = 0x25cf03c44356219, negotiated timeout = 10000
2017-07-11 17:18:04.223 INFO 9592 --- [back-2-thread-1] o.a.solr.common.cloud.ConnectionManager : Watcher org.apache.solr.common.cloud.ConnectionManager@7e722a25 name:ZooKeeperConnection Watcher:dwh
-mst-prd01.stor.nccourts.org,dwh-mst-prd03.stor.nccourts.org,dwh-mst-prd02.stor.nccourts.org:2181/solr got event WatchedEvent state:SyncConnected type:None path:null path:null type:None
2017-07-11 17:18:04.241 INFO 9592 --- [tp1110623531-19] o.a.solr.common.cloud.ConnectionManager : Client is connected to ZooKeeper
2017-07-11 17:18:04.242 INFO 9592 --- [tp1110623531-19] o.apache.solr.common.cloud.SolrZkClient : Using default ZkACLProvider
2017-07-11 17:18:04.248 INFO 9592 --- [tp1110623531-19] o.a.solr.common.cloud.ZkStateReader : Updating cluster state from ZooKeeper...
2017-07-11 17:18:04.248 INFO 9592 --- [back-2-thread-1] o.a.solr.common.cloud.ConnectionManager : Watcher org.apache.solr.common.cloud.ConnectionManager@7e722a25 name:ZooKeeperConnection Watcher:dwh
-mst-prd01.stor.nccourts.org,dwh-mst-prd03.stor.nccourts.org,dwh-mst-prd02.stor.nccourts.org:2181/solr got event WatchedEvent state:SaslAuthenticated type:None path:null path:null type:None
2017-07-11 17:18:04.654 ERROR 9592 --- [tp1110623531-19] o.a.s.client.solrj.impl.CloudSolrClient : Request to collection party_name failed due to (401) org.apache.solr.client.solrj.impl.HttpSolrClien
t$RemoteSolrException: Error from server at https://dwh-mst-prd03.stor.nccourts.org:8985/solr/party_name: Expected mime type application/octet-stream but got text/html. <html><head><title>Apache Tomca
t/6.0.45 - Error report</title><style><!--H1 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:22px;} H2 {font-family:Tahoma,Arial,sans-serif;color:white;background-c
olor:#525D76;font-size:16px;} H3 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:14px;} BODY {font-family:Tahoma,Arial,sans-serif;color:black;background-color:white
;} B {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;} P {font-family:Tahoma,Arial,sans-serif;background:white;color:black;font-size:12px;}A {color : black;}A.name {color : b
lack;}HR {color : #525D76;}--></style> </head><body><h1>HTTP Status 401 - Authentication required</h1><HR size="1" noshade="noshade"><p><b>type</b> Status report</p><p><b>message</b> <u>Authentication
required</u></p><p><b>description</b> <u>This request requires HTTP authentication.</u></p><HR size="1" noshade="noshade"><h3>Apache Tomcat/6.0.45</h3></body></html>, retry? 0
Created 07-13-2017 10:16 AM
Created 07-13-2017 10:08 AM
Created 07-13-2017 10:16 AM
Created 07-14-2017 11:56 AM
Created 08-01-2017 11:02 AM
yes, that's the correct solution and you can look at this code example too.
import org.apache.solr.client.solrj.SolrServer;
import org.apache.solr.client.solrj.SolrServerException;
import org.apache.solr.common.SolrInputDocument;
//import org.apache.solr.client.solrj.impl.CommonsHttpSolrServer;
import org.apache.solr.client.solrj.impl.HttpSolrServer;
import org.apache.solr.client.solrj.impl.CloudSolrServer;
import org.apache.solr.client.solrj.response.QueryResponse;
import org.apache.solr.client.solrj.SolrQuery;
import org.apache.solr.client.solrj.*;
import org.apache.solr.common.SolrInputDocument;
import org.apache.solr.client.solrj.beans.Field;
import org.apache.solr.common.cloud.*;
import org.apache.solr.common.SolrDocumentList;
import org.apache.solr.common.params.ModifiableSolrParams;
import org.apache.solr.client.solrj.impl.*;
import javax.security.auth.callback.*;
import javax.security.auth.login.LoginContext;
import java.io.*;
import java.util.*;
import java.net.MalformedURLException;
public class SolrKerberosAuth {
public SolrKerberosAuth() {
}
public static void main(String[] args) throws SolrServerException, IOException {
HttpClientUtil.setConfigurer(new Krb5HttpClientConfigurer());
System.setProperty("java.security.auth.login.config",
"/home/user.name/jaas-client.conf <http://user.name/jaas-client.conf>");
HttpSolrServer server = new
HttpSolrServer("http://solr-host:8983/solr/solrtest");
SolrInputDocument doc = new SolrInputDocument();
doc.addField("id", "1111");
// doc.addField("source", "TestSource9");
try {
// server.ping();
server.add(doc);
} catch (SolrServerException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
javac -cp "/opt/cloudera/parcels/CDH/jars/*" SolrKerberosAuth.java
Created on 02-15-2018 09:49 PM - edited 02-15-2018 09:52 PM
We are tryng the same thing. However when we execute our code, it asks for the Kereros Credentials. Is there anyway to authenticate solr user using Keytab files?