Можно ли иметь несколько аудиторий с идентификаторами клиентов и секретами? - PullRequest
0 голосов
/ 15 января 2020

С Microsoft.Owin.Security.Jwt вы можете сделать что-то вроде этого:

public static void ConfigureOAuth(IAppBuilder app)
{
    OAuthConfiguration oAuthConfiguration = OAuthConfiguration.GetConfig("oauth");

    List<string> audiences = new List<string>();
    List<byte[]> secrets = new List<byte[]>();

    foreach (var oAuthAudienceElement in /*configuration*/)
    {
        audiences.Add(/*configuration thingy*/);
        secrets.Add(TextEncodings.Base64Url.Decode(/*configuration thingy*/));
    }

    // Api controllers with an [Authorize] attribute will be validated with JWT
    app.UseJwtBearerAuthentication(
        new JwtBearerAuthenticationOptions
        {
            AuthenticationMode = AuthenticationMode.Active,
            AllowedAudiences = new List<string>(audiences),
            IssuerSecurityTokenProviders = new IIssuerSecurityTokenProvider[]
            {
                new SymmetricKeyIssuerSecurityTokenProvider(oAuthConfiguration.Issuer.Domain, secrets)
            }
        });
}

Но я не могу найти эквивалент этого в ASP. NET Core 2.X , Это не поддерживается или я что-то упустил? Я имею в виду, услуги. AddJwtBearer не предоставляет много:

services.AddAuthentication("oauth")
    .AddOAuth("oauth", options =>
    {
        // something?
    })
    .AddJwtBearer("oauth", options =>
    {

        options.TokenValidationParameters = new TokenValidationParameters
        {
            // These don't exist as in the Microsoft.Owin.Security.Jwt example above...
            // AuthenticationMode = AuthenticationMode.Active,
            // AllowedAudiences = new List<string>(audiences),
            // IssuerSecurityTokenProviders = new IIssuerSecurityTokenProvider[]
            // {
            //     new SymmetricKeyIssuerSecurityTokenProvider(oAuthConfiguration.Issuer.Domain, secrets)
            // }
        };
    });

1 Ответ

1 голос
/ 15 января 2020

Вы должны использовать AddJwtBearer(), а не AddOAuth().

В TokenValidationParameters, аудитории, эмитенты и ключи подписи могут принимать IEnumerable в качестве ввода, поэтому вы можете указать несколько значений ( обратите внимание, что все имена свойств указаны во множественном числе):

options.TokenValidationParameters = new TokenValidationParameters
{
    ValidAudiences = new [] {"audience1", "audience2" },
    ValidIssuers = new[] { "issuer1", "issuer2" },
    IssuerSigningKeys = secrets.Select(secret => new SymmetricSecurityKey(secret))
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...