Okay, so habe ich es, aber die Lösung kann ein bisschen Ghetto sein. Ich nahm das AuthorizeAttribute von .net mvc-Quelle und umcodierte die OnAutorization-Methode. Dies funktioniert definitiv für mich, aber es funktioniert nur für die Standardauthentifizierung und ich bin mir nicht sicher, ob dies die sicherste Methode ist. Es löst jedoch das Problem, dass Webclients auf sichere .net-mvc-Restdienste zugreifen können.
public virtual void OnAuthorization(AuthorizationContext filterContext)
{
if (filterContext == null)
{
throw new ArgumentNullException("filterContext");
}
string auth = filterContext.HttpContext.Request.Headers["authorization"];
if (!String.IsNullOrEmpty(auth))
{
byte[] encodedDataAsBytes = Convert.FromBase64String(auth.Replace("Basic ", ""));
string val = Encoding.ASCII.GetString(encodedDataAsBytes);
string userpass = val;
string user = userpass.Substring(0, userpass.IndexOf(':'));
string pass = userpass.Substring(userpass.IndexOf(':') + 1);
if (!System.Web.Security.Membership.Provider.ValidateUser(user, pass))
{
filterContext.Result = new HttpUnauthorizedResult();
}
}
else
{
if (AuthorizeCore(filterContext.HttpContext))
{
HttpCachePolicyBase cachePolicy = filterContext.HttpContext.Response.Cache;
cachePolicy.SetProxyMaxAge(new TimeSpan(0));
cachePolicy.AddValidationCallback(CacheValidateHandler, null /* data */);
}
else
{
// auth failed, redirect to login page
filterContext.Result = new HttpUnauthorizedResult();
}
}
}
Erhalten Sie einen Fehler? Was ist der Statuscode? – David