0

ASP.Net MVC3 を使用して JSON API を作成する予定です。セキュリティを処理するために、API キー、または場合によってはユーザー名/パスワード、場合によってはタイムスタンプのようなものがあります。
以前に MVC を行ったことはありませんが、コードを Global.asax に追加して、すべてのリクエストにこれらの変数が何らかの形で含まれるようにする簡単な方法がないかどうか疑問に思っています。そうすれば、API キーが含まれていない限り、リクエストは通過できません。
そうすれば、サイトの各セクションに API キーの処理を追加する必要がなくなります。

4

1 に答える 1

1

グローバル認証フィルターを作成します -

[AttributeUsage(AttributeTargets.Method | AttributeTargets.Class, Inherited = true, AllowMultiple = true)]
public class MyAuthorizationFilterAttribute : FilterAttribute, IAuthorizationFilter
{
    public void OnAuthorization(AuthorizationContext filterContext)
    {
    // do Authorization
    }
}

それを Global.asax に登録します -

public static void RegisterGlobalFilters(GlobalFilterCollection filters)
    {
        filters.Add(new MyAuthorizationFilterAttribute());
    }
protected void Application_Start()
    {
        AreaRegistration.RegisterAllAreas();

        RegisterGlobalFilters(GlobalFilters.Filters);
        RegisterRoutes(RouteTable.Routes);
    }

特注の認証モジュールを作成することもできますが -

public class CustomAuthentication : IHttpModule
{
    public void Init(HttpApplication application)
    {
        application.AuthenticateRequest += new EventHandler(this.Authenticate);
    }
    public void Authenticate(object source, EventArgs eventArgs)
    {
        HttpApplication _application = (HttpApplication)source;
        HttpContext _context = _application.Context;

        // do authentication

        // if authenticated set pricipal
        // _context.User = new GenericPrincipal(new GenericIdentity("user"), new string[]);

    }


    public void Dispose() { }
}

次に、モジュールを web.config に登録するだけです。

<modules runAllManagedModulesForAllRequests="true">
      <add name="CustomAuthentication" type="AuthenticationNamespace.CustomAuthentication"/>
</modules>

asp.net認証をnoneに設定します-

<authentication mode="None">
</authentication>

次に、AuthorizationFilter でユーザーが認証されていることを確認できます。

if(HttpContext.Current.Request.User.Identity.IsAuthenticated)
于 2012-05-04T20:52:32.510 に答える