1

誰もがそれを取得できるわけではないように、APIにアクセスするための安全なトークンを追加するにはどうすればよいですか?URLの形式を:にしたいのですが、api.example.com/*key*/person?id=5このリクエストを送信すると、キーが有効な場合は無効なログインが返されます。私はこれを作るためにmvc4apiと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 に答える