Промежуточное ПО множественной аутентификации - PullRequest
0 голосов
/ 26 октября 2018

Добрый день

Я нахожусь в процессе переноса API с использования:

app.UseOAuthBearerAuthentication(new OAuthBearerAuthenticationOptions()); 

для проверки токенов на использование IdentityServer.

Я хочуоднако также можно проверять любые токены, выпущенные ранее, используя вышеупомянутое промежуточное программное обеспечение.

Поэтому сначала я заменил приведенную выше строку следующим (IdentityServer3.AccessTokenValidation):

    .UseIdentityServerBearerTokenAuthentication(new IdentityServerBearerTokenAuthenticationOptions
        {
            Authority = "http://localhost:5000",
            RequiredScopes = new[] { "api.tablet" },
            ClientId = "TabletAPI",
            ClientSecret = "secret",
        });

Это сработалои правильно авторизованные запросы к защищенным конечным точкам, но только для токенов, выпущенных IdentityServer.Так что моя установка в IdentityServer в порядке, я считаю, что использование эталонного токена правильно проверено и разрешено.

Однако я хочу, чтобы старые токены OAuth также были проверены, и, таким образом, поддерживаю старые токены OAuth, а такжелюбые JwT или эталонные токены, выпущенные моим IdentityServer.

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

        app.UseOAuthBearerAuthentication(new OAuthBearerAuthenticationOptions()
        {
            AuthenticationType = "BearerLegacy",
        })
        .UseIdentityServerBearerTokenAuthentication(new IdentityServerBearerTokenAuthenticationOptions
        {
            Authority = WebConfigurationManager.AppSettings["AuthServer"],
            RequiredScopes = new[] { "api.tablet" },
            AuthenticationType = "BearerIdSrv",
            ClientId = "TabletAPI",
            ClientSecret = "secret",
        });

Это то, где я застрял, похоже, что промежуточное программное обеспечение IdentityServer всегда пытается проверить токен, и после сбоя кажется, что оно никогда не пробует "устаревшее" промежуточное ПО OAuth.

Нужно ли явно что-то добавлять ко всем моим конечным точкам [Authorize], чтобы указать, что оба типа следует попробовать?Или есть способ указать это глобально?

Я нашел это, что более или менее точно соответствует тому, что я хочу достичь, но, к сожалению, в Asp.Net Core.

Любая помощь или толчок в правильном направлении будет принята с благодарностью.

1 Ответ

0 голосов
/ 08 ноября 2018

Я нашел эту ссылку , где они предлагают удалить RequiredScopes из IdentityServerBearerTokenAuthenticationOptions.Я попробовал это, и это начало работать.Итак, по сути это:

app.UseOAuthBearerAuthentication(new OAuthBearerAuthenticationOptions()
    {
        AuthenticationType = "BearerLegacy",
    })
    .UseIdentityServerBearerTokenAuthentication(new IdentityServerBearerTokenAuthenticationOptions
    {
        Authority = WebConfigurationManager.AppSettings["AuthServer"],
        RequiredScopes = new[] { "api.tablet" },
        AuthenticationType = "BearerIdSrv",
        ClientId = "TabletAPI",
        ClientSecret = "secret",
    });

Необходимо стать таким:

app.UseOAuthBearerAuthentication(new OAuthBearerAuthenticationOptions()
    {
        AuthenticationType = "BearerLegacy",
    })
    .UseIdentityServerBearerTokenAuthentication(new IdentityServerBearerTokenAuthenticationOptions
    {
        Authority = WebConfigurationManager.AppSettings["AuthServer"],
        AuthenticationType = "BearerIdSrv",
        ClientId = "TabletAPI",
        ClientSecret = "secret",
    });
...