14 authentication rest asp.net-mvc
任何人都知道这是如何工作的,我正在使用.net成员资格提供程序,只想拉出一个xml列表.我也在使用.net mvc sdk.所以这就是我在控制器顶部添加[WebApiEnabled]时我可以成功拉出xml/json的问题.但是当我将[Authenticate]添加到我的控制器顶部时,我无法登录.作为示例curl -i -u"admin:pass"-H"Accept:application/xml" http:// localhost:xxxx/Book
在此先感谢您的帮助
我想我会在这里为任何人(像我一样)添加这个,他们不能完全理解作者在这里提供的答案.这是一篇博客文章,我刚刚描述了如何使用一个[CustomBasicAuthorize]属性来完成此操作,该属性的使用方式[Authorize]与MVC附带的属性相同:http://cacheandquery.com/blog/2011/03/customizing-asp-net- MVC-基本的身份验证/
小智 8
好吧,所以我想出来了,但解决方案可能有点贫民窟.我从.net mvc源获取了AuthorizeAttribute并重新编码了OnAutorization方法.这绝对适用于我,但它只适用于基本身份验证,我不知道这是否是最安全的方法.但它确实解决了Web客户端能够访问安全.net mvc休息服务的问题.
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();
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
13574 次 |
| 最近记录: |