I have an ASP MVC3 restful service that uses basic authentication. After searching stack overflow, I created the following code.
public class BasicAuthentic
Refactored version of Adrian's
public class BasicAuthenticationAttribute : ActionFilterAttribute
{
private static readonly string AuthorizationHeader = "Authorization";
private static readonly string BasicHeader = "Basic ";
private static readonly string Username = "username";
private static readonly string Password = "password";
private static readonly char[] Separator = ":".ToCharArray();
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
try
{
if (!Authenticated(filterContext.HttpContext.Request))
filterContext.Result = new HttpUnauthorizedResult();
base.OnActionExecuting(filterContext);
}
catch
{
filterContext.Result = new HttpUnauthorizedResult();
}
}
private bool Authenticated(HttpRequestBase httpRequestBase)
{
bool authenticated = false;
if (String.IsNullOrEmpty(httpRequestBase.Headers[AuthorizationHeader]) == false &&
httpRequestBase.Headers[AuthorizationHeader].StartsWith(BasicHeader, StringComparison.InvariantCultureIgnoreCase))
{
string[] credentials = Encoding.ASCII.GetString(Convert.FromBase64String(
httpRequestBase.Headers[AuthorizationHeader].Substring(BasicHeader.Length))).Split(Separator);
if (credentials.Length == 2 && credentials[0] == Username && credentials[1] == Password)
{
authenticated = true;
}
}
return authenticated;
}
}