NTLM Authentication with Servlets
Hello,
I'm working in a large corporation. Our Customer Service Dept is using a lot of Intranet web applications and for each webapp the user needs to type a username and password (if they still remember the corresponding one :) ).
A colleague told me about NTLM recently.
I have found it very interesting in the context of Intranet environment where all users are using IE browser.
Users don't need to type username and password anymore, they will be authenticated seamlessly via their NT login (Signle Sign On).
Below the final code result from this link discussion:
http://www.jguru.com/faq/viewquestion.jsp?EID=393110
and an interesting documentation about NTLM
http://www.innovation.ch/java/ntlm.html
Code:
String auth = request.getHeader("Authorization");
if (auth == null)
{
response.setStatus(response.SC_UNAUTHORIZED);
response.setHeader("WWW-Authenticate", "NTLM");
response.flushBuffer();
return;
}
if (auth.startsWith("NTLM "))
{
byte[] msg = new sun.misc.BASE64Decoder().decodeBuffer(auth.substring(5));
int off = 0, length, offset;
if (msg[8] == 1)
{
byte z = 0;
byte[] msg1 = {(byte)'N', (byte)'T', (byte)'L', (byte)'M', (byte)'S', (byte)'S', (byte)'P',
z,(byte)2, z, z, z, z, z, z, z,(byte)40, z, z, z,
(byte)1, (byte)130, z, z,z, (byte)2, (byte)2,
(byte)2, z, z, z, z, z, z, z, z, z, z, z, z};
response.setHeader("WWW-Authenticate", "NTLM " +
new sun.misc.BASE64Encoder().encodeBuffer(msg1));
response.sendError(response.SC_UNAUTHORIZED);
return;
}
else if (msg[8] == 3)
{
off = 30;
length = msg[off+17]*256 + msg[off+16];
offset = msg[off+19]*256 + msg[off+18];
String remoteHost = new String(msg, offset, length);
length = msg[off+1]*256 + msg[off];
offset = msg[off+3]*256 + msg[off+2];
String domain = new String(msg, offset, length);
length = msg[off+9]*256 + msg[off+8];
offset = msg[off+11]*256 + msg[off+10];
String username = new String(msg, offset, length);
out.println("Username:"+username+"<BR>");
out.println("RemoteHost:"+remoteHost+"<BR>");
out.println("Domain:"+domain+"<BR>");
}
}
Is there any similar support from Acegi ?
Or how will you use NTLM in Acegi ?
I'm new to all of this area.
Sorry if my question is unclear or has an obvious answer.
Regards,
José.