web-dev-qa-db-ja.com

Asp.Net Core 2.0「AddJwtBearer」ミドルウェアで複数のオーディエンスを設定する方法

AADに対して認証しているAsp.Net Core 2.0 WebApiがあります。

_            services.AddAuthentication(options => { options.DefaultScheme = JwtBearerDefaults.AuthenticationScheme; })
                .AddJwtBearer(options =>
                            {
                                options.Authority = "https://login.microsoftonline.com/TENANT.onmicrosoft.com";
                                options.Audience = "CLIENT_ID";
                            });
_

SPAアプリはAADからトークンを取得し、bearerヘッダーとして送信しました。すべて正常に動作します。

Azure Schedulerでジョブを作成し、_Active Directory OAuth_をセットアップしました: Job - Active Directory OAuth

ジョブを実行した後、次のエラーが表示されます:_Bearer error="invalid_token", error_description="The audience is invalid"_。

AddJwtBearer(...)の_options.Audience_を_https://management.core.windows.net/_に設定すると、ジョブは機能しますが、SPAは機能しません。

Audienceを配列_['CLIENT_ID', "https://management.core.windows.net/"]_に設定する必要があると思いますが、_options.Audience_はstringのタイプです。 Audienceをまったく設定しないと、SpaとJobの両方が機能しません(401認証なし)。 Audienceを_CLIENT_ID,https://management.core.windows.net/_に設定しても機能しません。

AddJwtBearerで複数のオーディエンスを有効にする方法はありますか?

20

私はあなたと同じ問題に遭遇したと思います。動作させるために、オーディエンスをoptionsからTokenValidationParametersに移動しました。これは複数のエントリを受け入れます。以下のコードを確認してください。

.AddJwtBearer(options =>
{
    options.Authority = "https://login.windows.net/trades.no";
    options.TokenValidationParameters = new Microsoft.IdentityModel.Tokens.TokenValidationParameters
    {
        ValidateIssuer = true,
        ValidAudiences = new List<string> 
        {
            "AUDIENCE1",
            "AUDIENCE2" 
        }
    };
39
Pantani