Mercurial > hg > AnnotationManager
comparison libs/httpcomponents-client-4.0-beta1/NTLM_SUPPORT.txt @ 5:0be9d53a6967
editor for annotations
author | dwinter |
---|---|
date | Tue, 13 Dec 2011 17:43:46 +0100 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
4:c32080f364c6 | 5:0be9d53a6967 |
---|---|
1 NTLM support in HttpClient 4.x | |
2 ============================== | |
3 | |
4 Currently HttpClient 4.0 does not provide support for the NTLM authentication | |
5 scheme out of the box and probably never will. The reasons for that are legal | |
6 rather than technical. | |
7 | |
8 Background | |
9 ========== | |
10 NTLM is a proprietary authentication scheme developed by Microsoft and | |
11 optimized for Windows operating system. | |
12 | |
13 Until year 2008 there was no official, publicly available, complete | |
14 documentation of the protocol. Unofficial 3rd party protocol descriptions | |
15 existed [1] as a result of reverse-engineering efforts. It was not really | |
16 known whether the protocol based on the reverse-engineering were complete | |
17 or even correct. | |
18 | |
19 Microsoft published MS-NLMP [2] and MS-NTHT [3] specifications in February | |
20 2008 as a part of its Interoperability Principles initiative [4]. | |
21 Unfortunately, it is still not entirely clear whether NTLM encryption | |
22 algorithms are covered by any patents held by Microsoft, which would make | |
23 commercial users of open-source NTLM implementations liable for the use of | |
24 Microsoft intellectual property. | |
25 | |
26 Enabling NTLM support in HttpClient 4.x | |
27 ======================================= | |
28 The good news is HttpClient is fully NTLM capable right out of the box. | |
29 HttpClient ships with the NTLM authentication scheme, which, if configured | |
30 to use an external NTLM engine, can handle NTLM challenges and authenticate | |
31 against NTLM servers. | |
32 | |
33 ----------------------------------------------------------- | |
34 public interface NTLMEngine { | |
35 | |
36 String generateType1Msg( | |
37 String domain, | |
38 String workstation) throws NTLMEngineException; | |
39 | |
40 String generateType3Msg( | |
41 String username, | |
42 String password, | |
43 String domain, | |
44 String workstation, | |
45 String challenge) throws NTLMEngineException; | |
46 | |
47 } | |
48 ----------------------------------------------------------- | |
49 | |
50 Using Samba JCIFS as an NTLM engine | |
51 =================================== | |
52 Follow these instructions to build an NTLMEngine implementation using JCIFS | |
53 library | |
54 | |
55 =========== !!!! DISCLAIMER !!!! =========== | |
56 HttpComponents project DOES _NOT_ SUPPORT the code provided below. Use it as | |
57 is at your own discretion. | |
58 | |
59 * Download the latest jcifs library from the Samba web site [5] | |
60 * Implement NTLMEngine interface | |
61 ----------------------------------------------------------- | |
62 import jcifs.ntlmssp.Type1Message; | |
63 import jcifs.ntlmssp.Type2Message; | |
64 import jcifs.ntlmssp.Type3Message; | |
65 import jcifs.util.Base64; | |
66 | |
67 import org.apache.http.impl.auth.NTLMEngine; | |
68 import org.apache.http.impl.auth.NTLMEngineException; | |
69 | |
70 public class JCIFSEngine implements NTLMEngine { | |
71 | |
72 public String generateType1Msg( | |
73 String domain, | |
74 String workstation) throws NTLMEngineException { | |
75 | |
76 Type1Message t1m = new Type1Message( | |
77 Type1Message.getDefaultFlags(), | |
78 domain, | |
79 workstation); | |
80 return Base64.encode(t1m.toByteArray()); | |
81 } | |
82 | |
83 public String generateType3Msg( | |
84 String username, | |
85 String password, | |
86 String domain, | |
87 String workstation, | |
88 String challenge) throws NTLMEngineException { | |
89 Type2Message t2m; | |
90 try { | |
91 t2m = new Type2Message(Base64.decode(challenge)); | |
92 } catch (IOException ex) { | |
93 throw new NTLMEngineException("Invalid Type2 message", ex); | |
94 } | |
95 Type3Message t3m = new Type3Message( | |
96 t2m, | |
97 password, | |
98 domain, | |
99 username, | |
100 workstation); | |
101 return Base64.encode(t3m.toByteArray()); | |
102 } | |
103 | |
104 } | |
105 ----------------------------------------------------------- | |
106 * Implement AuthSchemeFactory interface | |
107 ----------------------------------------------------------- | |
108 import org.apache.http.auth.AuthScheme; | |
109 import org.apache.http.auth.AuthSchemeFactory; | |
110 import org.apache.http.impl.auth.NTLMScheme; | |
111 import org.apache.http.params.HttpParams; | |
112 | |
113 public class NTLMSchemeFactory implements AuthSchemeFactory { | |
114 | |
115 public AuthScheme newInstance(final HttpParams params) { | |
116 return new NTLMScheme(new JCIFSEngine()); | |
117 } | |
118 | |
119 } | |
120 ----------------------------------------------------------- | |
121 * Register NTLMSchemeFactory with the HttpClient instance you want to NTLM | |
122 enable. | |
123 ----------------------------------------------------------- | |
124 httpclient.getAuthSchemes().register("ntlm", new NTLMSchemeFactory()); | |
125 ----------------------------------------------------------- | |
126 * Set NTCredentials for the web server you are going to access. | |
127 ----------------------------------------------------------- | |
128 httpclient.getCredentialsProvider().setCredentials( | |
129 new AuthScope("myserver", -1), | |
130 new NTCredentials("username", "password", "MYSERVER", "MYDOMAIN")); | |
131 ----------------------------------------------------------- | |
132 * You are done. | |
133 | |
134 | |
135 Why this code is not distributed with HttpClient | |
136 ================================================ | |
137 JCIFS is licensed under the Lesser General Public License (LGPL). This license | |
138 is not compatible with the Apache Licenses under which all Apache Software is | |
139 released. Lawyers of the Apache Software Foundation are currently investigating | |
140 under which conditions Apache software is allowed to make use of LGPL software. | |
141 | |
142 ----------------------------------------------------------- | |
143 [1] http://davenport.sourceforge.net/ntlm.html | |
144 [2] http://download.microsoft.com/download/a/e/6/ae6e4142-aa58-45c6-8dcf-a657e5900cd3/%5BMS-NLMP%5D.pdf | |
145 [3] http://download.microsoft.com/download/a/e/6/ae6e4142-aa58-45c6-8dcf-a657e5900cd3/%5BMS-NTHT%5D.pdf | |
146 [4] http://www.microsoft.com/interop/principles/default.mspx | |
147 [5] http://jcifs.samba.org/ |