Добрый день
Я нахожусь в процессе переноса 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.
Любая помощь или толчок в правильном направлении будет принята с благодарностью.