2017-12-12 12 views

答えて

0

私の意見では、本質的に別の認証方法があります。

ヘッダーをチェックし、それに基づいてユーザープリンシパルを作成する独自の認証方式を定義することが最も理にかなっています。

その後、いつものように[Authorize]を使い続けることができます。

例を書くのはかなり時間がかかるでしょう。現時点で私が提供できるのは、JWTベアラーのようなビルトイン認証スキームがすべて入っているセキュリティレポです。https://github.com/aspnet/Security/blob/dev/src/Microsoft.AspNetCore.Authentication.JwtBearer/JwtBearerHandler.cs認証ハンドラを実装します。

+0

カスタム認証の代わりに、そのコントローラのカスタムルーティングを行うことは可能ですか? –

+0

認証されたユーザが存在するかどうかをチェックするミドルウェアで行うこともできますMVCにヒットする前に要求パスを変更します。しかし、これまでの作業ではなく、すべてのフレームワークのツールを使用できるようになりました。 – juunas

0

hereのようなカスタム認証ハンドラを作成できます。

services.AddAuthorization(
      o => 
      { 
       // create a policy called ApiKeyPolicy which requires a Role defined in 
       // ApiKeyAuthenticationOptions. 
       // The policy is used by the API controllers. 
       o.AddPolicy(
        "ApiKeyPolicy", builder => 
        { 
         builder.AddAuthenticationSchemes(
          ApiKeyAuthenticationOptions.AuthenticationSchemeName); 
        }); 
      }); 

をしてservices.AddAuthenticationビルダーにスキームを追加します:あなたはStartup.csに許可を追加し

、あなたは次のようにカスタムポリシーを追加することができます

builder.AddScheme<ApiKeyAuthenticationOptions, ApiKeyAuthenticationHandler>(
      "ApiKey", "ApiKey", o => 
      { 
       o.AllowedApiKeys = config["Api:AllowedApiKeys"]; 
       o.ApiKeyHeaderName = config["Api:ApiKeyHeaderName"]; 
      }); 

私の例では、私はApiKeyAuthenticationOptionsクラスにいくつかのAPIキーとhttpヘッダー名を設定してチェックします。あなたの場合、おそらく有効なクライアントIDが必要でしょう。

最後に、ポリシーが必要とされている[Authorize]属性伝える必要があります:あなたのケースで

[Authorize(Policy = "ApiKeyPolicy")] 

を、あなたはクライアントIDと定期的な認証の両方を扱うことができるようにしたいので、あなたが定期的に追加することができますauthスキームをポリシービルダ式(上記の最初のスニペット)に追加します。

関連する問題