У меня есть приложение с существующей реализацией OAuth (вроде). Мы переходим на использование Identity Server для OAuth, и теперь мне нужно поддерживать обе схемы аутентификации на некоторых контроллерах / действиях.
Жетоны-носители для каждого метода Auth явно различны. Один из них - это guid, а другой - правильный токен, сгенерированный Identity Server.
Все, что мне нужно, это как-то посмотреть на токен и сказать что-либо с длиной строки <= 36 должно быть старым методом. Все остальное использовать Identity Server. </p>
Корневой контроллер имеет базовый атрибут [Authorize]. Также, если я переключу порядок схемы, первая из перечисленных работ.
Вот мой код Startup.cs
services.AddAuthentication(options =>
{
options.DefaultAuthenticateScheme = Constants.CompanyBearerScheme;
options.DefaultChallengeScheme = Constants.CompanyBearerScheme;
}).AddJwtBearer(options =>
{
options.Authority = "https://identityserverurl";
options.Audience = "APISCOPE";
options.RequireHttpsMetadata = true;
}).AddBearerToken(Constants.CompanyBearerScheme, o =>
{
o.ConnectionString = bearerTokenHandlerOptions.ConnectionString;
o.DefaultScopes = bearerTokenHandlerOptions.DefaultScopes;
})
Пример действия
[Authorize(AuthenticationSchemes = "CompanyBearer,Bearer")]
[HttpGet("TEST")]
public async Task<IActionResult> TestAuthentication()
{
return Ok();
}
Пример запроса
GET {{Url}}/Api/TEST
Authorization: Bearer SOMETOKEN