Tuesday, January 21, 2014


HTTP Basic access authentication

From Wikipedia, the free encyclopedia
In the context of an HTTP transaction, basic access authentication is a method for an HTTP user agent to provide a user name and password when making a request.

Features[edit]

HTTP Basic authentication (BA) implementation is the simplest technique for enforcing access controls to web resources because it doesn't require cookiessession identifier and login pages. Rather, HTTP Basic authentication uses static, standard HTTP headers which means that no handshakes have to be done in anticipation.

Security[edit]

The BA mechanism provides no confidentiality protection for the transmitted credentials. They are merely encoded with BASE64 in transit, but not encrypted or hashed in any way. Basic Authentication is, therefore, typically used over HTTPS.
Because the BA header has to be sent with each HTTP request, the web browser needs to cache credentials for a reasonable period of time to avoid constantly prompting the user for their username and password. Caching policy differs between browsers. Microsoft Internet Explorer by default caches them for 15 minutes.[1]
While HTTP does not provide a method for web server to instruct the browser to "log out" the user (forget cached credentials), there are a number of workarounds using specific features in various browsers. One of them is redirecting the user to an URL on the same domain containing credentials that are intentionally incorrect:
Unfortunately, this behavior is inconsistent between various browsers and browser versions.[2] Microsoft Internet Explorer offers a dedicated JavaScript method to clear cached credentials:[3]

Protocol[edit]

Server side[edit]

When the server wants the user agent to authenticate itself towards the server, it can send a request for authentication.
This request should be sent using the HTTP 401 Not Authorized response code[4] containing a WWW-Authenticate HTTP header.[5]
The WWW-Authenticate header for basic authentication (used most often) is constructed as following:[6]
WWW-Authenticate: Basic realm="insert realm"

Client side[edit]

When the user agent wants to send the server authentication credentials it may use the Authorization header.[7]
The Authorization header is constructed as follows:[8]
  1. Username and password are combined into a string "username:password"
  2. The resulting string literal is then encoded using the RFC2045-MIME variant of Base64, except not limited to 76 char/line[9]
  3. The authorization method and a space i.e. "Basic " is then put before the encoded string.
For example, if the user agent uses 'Aladdin' as the username and 'open sesame' as the password then the header is formed as follows:.
Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==

See also[edit]