1

我如何添加一个安全令牌来访问 api,以便不是每个人都能得到它。我希望我的 url 格式为:api.example.com/*key*/person?id=5当我发送此请求时,如果密钥有效,它将返回,如果无效,它将返回无效登录。我正在使用 mvc 4 api 和 C# 来制作这个,一个链接或其他东西会很棒。

4

2 回答 2

4

您最喜欢的关键短语是您需要创建和添加自定义ActionFilterAttribute.

在谷歌上快速搜索出现了这篇博客文章,其中谈到了做这个确切的事情(以及其他一些过滤器)。

以防万一有一些链接腐烂这里的要点(摘自博客文章):

  1. 提出一些生成/验证 API 令牌的方案

  2. 在属性中创建使用步骤 1 中的验证的属性

  3. 将属性添加到全局配置

代码

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 回答