我如何开始使用ASP.NET Web API编写身份验证代码,以便跨平台支持桌面、移动和web?我读过一些进行RESTful身份验证的方法,比如在头中使用令牌。
有没有使用这种方法的示例项目?
问题:
[Authorize]
属性以读取令牌?发布于 2012-04-05 11:56:49
我认为令牌将是一个可靠的方法。表单身份验证基于web的cookies。不过,对于所有非浏览器客户端来说,这并不是最理想的情况。
我建议的是创建一个自定义的AuthorizationFilterAttribute并覆盖OnAuthorization方法。在该方法中,您可以检查在客户端提供有效凭据之后是否存在您向客户端发出的令牌。您可以在任何要验证的方法或控制器上使用此属性。这里有一个你可以参考的例子
public class AuthorizeTokenAttribute : AuthorizationFilterAttribute
{
public override void OnAuthorization(HttpActionContext actionContext)
{
if (actionContext != null)
{
if (!AuthorizeRequest(actionContext.ControllerContext.Request))
{
actionContext.Response = new HttpResponseMessage(HttpStatusCode.Unauthorized) { RequestMessage = actionContext.ControllerContext.Request };
}
return;
}
}
private bool AuthorizeRequest(System.Net.Http.HttpRequestMessage request)
{
bool authorized = false;
if (request.Headers.Contains(Constants.TOKEN_HEADER))
{
var tokenValue = request.Headers.GetValues("TOKEN_HEADER");
if (tokenValue.Count() == 1) {
var value = tokenValue.FirstOrDefault();
//Token validation logic here
//set authorized variable accordingly
}
}
return authorized;
} }
TOKEN_HEADER只是一个字符串,表示客户端应该为经过身份验证的请求传回的HTTP头。
所以让我们走一遍
客户端尝试再次请求安全数据,这次将令牌附加到请求
另外,请查看这篇由John Petersen撰写的文章。Making your ASP.NET Web API’s secure
发布于 2012-03-27 19:38:22
有很多方法可以验证REST服务的用户。使用令牌是可能的,但只使用Basic Authentication更简单,而且几乎是标准的和跨平台的。
不要将authorization与authentication混淆。Authorize属性完全是关于授权的,但只有在使用其他机制对用户进行身份验证之后才能使用。如果不先做适当的身份验证,授权是完全无用的。
最好的参考资料是Dominick Baier,他是这方面的专家。
发布于 2012-04-19 23:30:54
我使用一个非常简单的方法:
来完成
使用新的ASP.NET MVC web API的这种方法的服务可以服务于任何类型的客户端:浏览器/javascript和本机(桌面或移动)等。
https://stackoverflow.com/questions/9881506
复制相似问题