2017-10-14 7 views
1

.NETコアが2.0に変更された後、この問題に関する情報が見つかりませんでした。.netコア2.0で簡単なヘッダー認証を行うには?

私はこのようなクッキーの承認があります。私が見つけた例で 私は単に、単純なヘッダに基づいて認可したい私のコントローラの別の部分(のために

services.AddAuthentication("ExampleCookieAuthenticationScheme") 
    .AddCookie("ExampleCookieAuthenticationScheme", options => { 
     options.AccessDeniedPath = "/Account/Forbidden/"; 
      options.LoginPath = "/Account/Login/"; 
}); 

を、どちらか私はできません。ヘッダを取得するには、または彼らは、唯一のFacebook、Googleのためにクッキーなどを作ってきた

私は、.NETコアでシンプルなヘッダチェックを行い、承認を追加するにはどうすればよい2.0?

答えて

1

行うことが可能です簡単なauthorizaカスタムミドルウェアを使用して確認します。しかし、選択したコントローラやアクションメソッドにカスタムミドルウェアを適用する必要がある場合は、ミドルウェアフィルタを使用できます。

Middlewareおよびそのアプリビルダーの拡張子:

public class SimpleHeaderAuthorizationMiddleware 
    { 
     private readonly RequestDelegate _next; 

     public SimpleHeaderAuthorizationMiddleware(RequestDelegate next) 
     { 
      _next = next; 
     } 

     public async Task Invoke(HttpContext context){ 

      string authHeader = context.Request.Headers["Authorization"]; 
      if(!string.IsNullOrEmpty(authHeader)) 
      { 
       //TODO 
       //extract credentials from authHeader and do some sort or validation 
       bool isHeaderValid = ValidateCredentials(); 
       if(isHeaderValid){ 
        await _next.Invoke(context); 
        return; 
       } 

      } 

      //Reject request if there is no authorization header or if it is not valid 
      context.Response.StatusCode = 401; 
      await context.Response.WriteAsync("Unauthorized"); 

     } 

    } 

public static class SimpleHeaderAuthorizationMiddlewareExtension 
    { 
     public static IApplicationBuilder UseSimpleHeaderAuthorization(this IApplicationBuilder app) 
     { 
      if (app == null) 
      { 
       throw new ArgumentNullException(nameof(app)); 
      } 

      return app.UseMiddleware<SimpleHeaderAuthorizationMiddleware>(); 
     } 
    } 

フィルタとしてのミドルウェアを使用するためには、あなたが使用したいミドルウェアパイプラインを指定Configure方法で型を作成する必要があります。

public class SimpleHeaderAuthorizationPipeline 
    { 
     public void Configure(IApplicationBuilder applicationBuilder){ 
      applicationBuilder.UseSimpleHeaderAuthorization(); 
     } 
    } 

今、あなたは、このような特定のコントローラやアクションメソッドで上記のタイプを使用することができます。

[MiddlewareFilter(typeof(SimpleHeaderAuthorizationPipeline))] 
public class ValuesController : Controller 
{ 
} 
関連する問題