我如何添加一个安全令牌来访问 api,以便不是每个人都能得到它。我希望我的 url 格式为:api.example.com/*key*/person?id=5
当我发送此请求时,如果密钥有效,它将返回,如果无效,它将返回无效登录。我正在使用 mvc 4 api 和 C# 来制作这个,一个链接或其他东西会很棒。
问问题
1634 次
2 回答
4
您最喜欢的关键短语是您需要创建和添加自定义ActionFilterAttribute
.
在谷歌上快速搜索出现了这篇博客文章,其中谈到了做这个确切的事情(以及其他一些过滤器)。
以防万一有一些链接腐烂这里的要点(摘自博客文章):
提出一些生成/验证 API 令牌的方案
在属性中创建使用步骤 1 中的验证的属性
将属性添加到全局配置
代码
public class TokenValidationAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(HttpActionContext actionContext)
{
string token;
try
{
token = actionContext.Request.Headers.GetValues("Authorization-Token").First();
}
catch (Exception)
{
actionContext.Response = new HttpResponseMessage(System.Net.HttpStatusCode.BadRequest)
{
Content = new StringContent("Missing Authorization-Token")
};
return;
}
try
{
//This part is where you verify the incoming token
AuthorizedUserRepository.GetUsers().First(x => x.Name == RSAClass.Decrypt(token));
base.OnActionExecuting(actionContext);
}
catch (Exception)
{
actionContext.Response = new HttpResponseMessage(System.Net.HttpStatusCode.Forbidden)
{
Content = new StringContent("Unauthorized User")
};
return;
}
}
}
}
为了使这些操作过滤器全局化,Global.asax Application_Start() 中的以下代码可以解决问题:
var config = GlobalConfiguration.Configuration;
config.Filters.Add(new TokenValidationAttribute());
于 2012-07-11T16:47:49.007 回答
0
在我的工作中,我们创建了用户名和密码的哈希值,并将其用作用户令牌。您可以为他们生成一个 GUID,跟踪它的创建时间和它属于谁。
于 2012-07-11T16:45:07.790 回答