I want to authenticate a socket connection in the Web browser by using the WWW-Authenticate: Basic
header but no prompt for username and password comes up. How do go about it?
public static void responseView(Socket socket) throws IOException {
responseHeaders(200);
DataOutputStream outputStream = new DataOutputStream(socket.getOutputStream());
for(String header : headers) {
outputStream.writeBytes(header + "\r\n");
}
outputStream.writeBytes("\r\n");
outputStream.writeBytes("<!DOCTYPE html><html><head><title>Java Web Server</title></head><body></body></html>");
outputStream.writeBytes("\r\n");
outputStream.flush();
}
public static void responseHeaders(int statusCode) {
SimpleDateFormat formatter= new SimpleDateFormat("yyyy-MM-dd 'at' HH:mm:ss z");
headers.add("HTTP/1.0 " + Integer.toString(statusCode) + " " + Config.STATUS_CODES.get(statusCode));
headers.add("Content-Type: text/html");
headers.add("Date: " + formatter.format(new Date(System.currentTimeMillis())));
headers.add("Server: Simple Java Web Server");
headers.add("WWW-Authenticate: Basic");
}
I want to authenticate a socket connection in the Web browser
Basic access authentication does not authenticate a socket connection, but a HTTP request. There can be multiple HTTP requests inside a single underlying socket connection, with different or with no authentication. And requesting authentication and sending the authenticated request can be done in different connections.
responseHeaders(200);
The status code when requesting authentication must be 401, not 200
headers.add("WWW-Authenticate: Basic");
The WWW-Authenticate
header must contain the realm
attribute to show the user what the authentication is for.
For a short overview about the topic see Wikipedia: Basic access authentication: Server side. The ultimate reference is the standard though.