Web Apiコントローラから[認証](Azure AD認証)をスキップする方法は、ヘッダー要求の値によって異なりますか?Web APIのAzureアクティブディレクトリ認証をスキップする方法URL要求ヘッダーの値によって異なります。
上記の_clientidはヘッダー値です。一部の_clientid値の認証をスキップします。
Web Apiコントローラから[認証](Azure AD認証)をスキップする方法は、ヘッダー要求の値によって異なりますか?Web APIのAzureアクティブディレクトリ認証をスキップする方法URL要求ヘッダーの値によって異なります。
上記の_clientidはヘッダー値です。一部の_clientid値の認証をスキップします。
私の意見では、本質的に別の認証方法があります。
ヘッダーをチェックし、それに基づいてユーザープリンシパルを作成する独自の認証方式を定義することが最も理にかなっています。
その後、いつものように[Authorize]
を使い続けることができます。
例を書くのはかなり時間がかかるでしょう。現時点で私が提供できるのは、JWTベアラーのようなビルトイン認証スキームがすべて入っているセキュリティレポです。https://github.com/aspnet/Security/blob/dev/src/Microsoft.AspNetCore.Authentication.JwtBearer/JwtBearerHandler.cs認証ハンドラを実装します。
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スキームをポリシービルダ式(上記の最初のスニペット)に追加します。
カスタム認証の代わりに、そのコントローラのカスタムルーティングを行うことは可能ですか? –
認証されたユーザが存在するかどうかをチェックするミドルウェアで行うこともできますMVCにヒットする前に要求パスを変更します。しかし、これまでの作業ではなく、すべてのフレームワークのツールを使用できるようになりました。 – juunas