Va bene così ho pensato che fuori, ma la soluzione può essere un po 'ghetto. Ho preso l'AuthorizeAttribute da .net mvc source e ho ricodificato il metodo OnAutorization. Questo sicuramente funziona per me, ma funziona solo per l'autenticazione di base e non sono sicuro se questo è il metodo più sicuro da usare. Tuttavia, risolve il problema dei client Web che possono accedere a servizi di sicurezza .net mc sicuri.
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();
}
}
}
fonte
2009-09-11 14:14:56
Hai ricevuto un errore? Qual è il codice di stato? – David