** तो, मुझे लगता है कि एसएएसएल/जीएसएस एपीआई के माध्यम से ऐसा करने का एक तरीका है। यह मुझे भ्रमित करता है कि मुझे इंटरनेट पर कहीं भी इस बारे में कोई महान उदाहरण क्यों नहीं दिख रहा है। हालांकि, मैंने उम्मीदों में जो कुछ बनाया है, उसका एक उदाहरण पोस्ट करता हूं कि यह दूसरों के लिए मददगार होगा ... या कोई यहां कुछ उपयोगी करने के मेरे भ्रम को सही कर सकता है।
नमूना सर्वर कोड:
TServerSocket serverTransport = new TServerSocket(7911); // new server on port 7911
HelloWorldService.Processor<Iface> processor = new HelloWorldService.Processer<Iface>(new ThriftServerImpl()); // This is my thrift implementation for my server
Map<String, String> saslProperties = new HashMap<String, String>(); // need a map for properties
saslProperties.put(Sasl.QOP, "true");
saslProperties.put(Sasl.QOP, "auth-conf"); // authorization and confidentiality
TSaslServerTransport.Factory saslTransportFactory = new TSaslServerTransport.Factory(); // Creating the server definition
saslTransportFactory.addServerDefinition(
"GSSAPI", // tell SASL to use GSSAPI, which supports Kerberos
"myserviceprincipal", // base kerberos principal name - myprincipal/[email protected]
"my.server.com", // kerberos principal server - myprincipal/[email protected]
saslProps, // Properties set, above
new SaslRpcServer.SaslGssCallbackHandler())); // I don't know what this really does... but I stole it from Hadoop and it works.. so there.
Tserver server = new TThreadPoolServer(newTThreadPoolSErver.Args(serverTransport).transportFactory(saslTrasnportFactory).processor(processor));
server.serve(); // Thrift server start
नमूना क्लाइंट कोड
TTransport transport = new TSocket("my.server.com", 7911); // client to connect to server and port
saslProperties.put(Sasl.QOP, "true");
saslProperties.put(Sasl.QOP, "auth-conf"); // authorization and confidentiality
TTransport saslTransport = new TSaslTransport(
"GSSAPI", // tell SASL to use GSSAPI, which supports Kerberos
null, // authorizationid - null
"myserviceprincipal", // base kerberos principal name - myprincipal/[email protected]
"my.server.com", // kerberos principal server - myprincipal/[email protected]
saslProps, // Properties set, above
null, // callback handler - null
transport); // underlying transport
TProtocol protocol = new TBinaryProtocol(saslTransport); // set up our new Thrift protocol
HelloWorldService.Client client = new HelloWorldService.Client(protocol); // Setup our thrift client
saslTransport.open();
String response = client.hello("Hi There"); // send message
System.out.println("response = " + response);
transport.close();
अन्य condsiderations:
* मैं दोनों क्लाइंट और सर्वर पर कई जावा गुण सेट करें।
- java.security.krb5.realm = MY.REALM // दायरे नाम
- java.security.krb5.kdc = my.kdc.com // KDC सर्वर
- javax.security.auth.useSubjectCredsOnly = false // जेएएएस को टीजीटी प्राप्त करने दें।
- java.security.auth.login.config = /etc/myapp/conf/jaas.conf - आवश्यक jaas फ़ाइल
- sun.security.krb5.debug = true // समस्याओं का निदान करने में सहायता मिली।
* ऊपर निर्दिष्ट jaas.conf फ़ाइल, दो प्रविष्टियों की आवश्यकता है (शायद केवल एक सर्वर ...)। मुझे याद नहीं है, जहां मैं इस जानकारी gleaned .. लेकिन यहाँ मेरी फाइल है:
com.sun.security.jgss.initiate {
com.sun.security.auth.module.Krb5LoginModule required
useKeyTab=true
keyTab="/etc/myapp/conf/myapp.keytab"
useTicketCache=true
principal="myuserprincipal"
debug=true;
};
com.sun.security.jgss.accept {
com.sun.security.auth.module.Krb5LoginModule required
useKeyTab=true
keyTab="/etc/myapp/conf/myapp.keytab"
useTicketCache=false
principal="myserviceprincipal/my.server.com"
debug=true;
};
(वापस विचार करने के लिए ....)
* "Auth-conf" का एक Sasl.QOP होने के बावजूद .. संक्रमित होने वाला पहला (?) संदेश एन्क्रिप्टेड नहीं है। शायद यह सिर्फ एक हैंडशेक है, या कुछ। शेष संदेश एन्क्रिप्ट किए गए प्रतीत होते हैं, लेकिन यह पहला "कंसोल द्वारा कोई एन्क्रिप्शन नहीं किया गया" कंसोल पर एक बदसूरत संदेश प्रिंट करता है। यह संदेश अच्छा नहीं होगा, क्योंकि इससे सड़क पर दुःख होगा (वारंट या नहीं)।
वैसे भी, मुझे उम्मीद है कि यह किसी की मदद करेगा ... या वैकल्पिक रूप से कुछ सुधारों को उकसा सकता है जो मेरी मदद करेंगे। :) विश्वास करना मुश्किल है कि मैं इसे करने में 2-3 दिन बिताता हूं, और केवल थोड़ी सी मात्रा में कोड आया, लेकिन जब मैंने शुरू किया तो मुझे न तो केर्बेरोज या बहाव बहुत अच्छी तरह से पता था।
पढ़ने के लिए धन्यवाद।
ऐसा लगता है कि हैडोप ने इस पर कुछ किया होगा ... – Wanderer