Exchange 2003 introduced "forms-based authentication" for OWA, which lets the administrator configure OWA to present an html form to the user to type his username and password into instead of using HTTP authentication. This has various benefits, particularly that you can guarantee that the auth information won't be cached on the workstation after you log out, and that the administrator can make the authentication time out after the interval of his choosing. It's annoying for us though. If forms-based auth is turned on, then HTTP auth just won't work. You have to play the forms game. If forms-based auth is turned on, then SSL must also be required, and non-https requests will get "403 Forbidden". GET requests under /exchange will be redirected to /exchweb/bin/auth/owalogon.asp?url=(ORIGINAL URL HERE)&reason=0 All other HTTP/WebDAV requests will get a "440 Login Timeout". Trying to GET owalogon.asp with "Translate: F" will return "403 Forbidden". The page returned by owalogon.asp is slightly different for IE and non-IE. Either way it contains a form with at least the following fields: destination (hidden): the original URL that redirected us here flags (hidden): options bitfield, as described below username: the username entry password: the password entry trusted: whether this is a public or private computer The "private" value for "trusted" is 4, and we pass that, so that we get the longer credentials timeout time. (24 hours by default). You also have to pass 4 for "flags" to indicate this. (The "1" bit in flags indicate that you want to use the non-IE version of OWA even if you are on IE. We don't pass that option.) We then POST the form with the user's username and password: POST /exchweb/bin/auth/owaauth.dll HTTP/1.1 Host: ex2k3.xcs.ximian.com Content-Type: application/x-www-form-urlencoded Content-Length: 127 destination=https%3A%2F%2Fex2k3.xcs.ximian.com%2Fexchange%2F& flags=0&username=danw&password=foobar&SubmitCreds=Log+On&trusted=0 To which the server responds: HTTP/1.1 302 Moved Temporarily Server: Microsoft-IIS/5.0 Date: Thu, 24 Jul 2003 17:23:33 GMT X-Powered-By: ASP.NET Location: https://ex2k3.xcs.ximian.com/exchange/ Set-Cookie: sessionid=fbb50caf-381a-4f85-9582-a7a902b4561f,0x409; path=/ Set-Cookie: cadata="2,8JOrhiSTShG6UyFwWDoV7jrigo+a5XQgEbws7tq3//37QERxw6DGvROIJyk+Awlm"; HttpOnly; secure; path=/ Content-Length: 0 ("HttpOnly" is a Microsoft extension to the Cookie protocol, which means that the cookie should not be visible to Javascript/VBScript, etc. "Secure" means that you should only send it over HTTPS, and "path=/" means it's good for any path on this server.) Now you have to make another request to find out if the cookie is any good. This request (and all further requests) should include the two cookies: Cookie: sessionid=fbb50caf-381a-4f85-9582-a7a902b4561f,0x409; cadata="2,8JOrhiSTShG6UyFwWDoV7jrigo+a5XQgEbws7tq3//37QERxw6DGvROIJyk+Awlm" If you do an OWA GET (a GET without "Translate: F"), failure will be indicated by a "200 OK" response containing the login form again. If you do any other request, failure is indicated by a "440 Login Timeout" cancelling the cookie: 440 Login Timeout Set-Cookie: sessionid=; path=/; expires=Thu, 01-Jan-1970 00:00:00 GMT Set-Cookie: cadata=; path=/; expires=Thu, 01-Jan-1970 00:00:00 GMT Connection: close Eventually, when the cookie does expire, you will get a "440 Login Timeout" as above, and have to reauthenticate to get a new cookie.