Использовать ключ подписи JwtBearerAuthentication

Я пытаюсь реализовать Аутентификацию на носителе JWT в своем приложении AspNetCore MVC (только для веб-API), используя JwtBearerMiddleware, но получаю 401 ответ с заголовком:

WWW-Authenticate: Bearer error="invalid_token", error_description="The signature key was not found"

Соответствующий код в Startup.cs выглядит так:

app.UseJwtBearerAuthentication(new JwtBearerOptions
{
    Authority = "https://example.okta.com",
    Audience = "myClientId"
});

С URL-адресом авторизации я бы ожидал, что промежуточное ПО будет запрашивать мои метаданные провайдера идентификации из https://example.okta.com/.well-known/openid-configuration чтобы получить jwks_uri затем получить ключи подписи от https://example.okta.com/oauth2/v1/keys, Я не думаю, что это происходит. Что мне нужно сделать, чтобы заставить его находить и использовать ключи подписи? Спасибо

1 ответ

Решение

После следующих ссылок и копания в репозитории AspNet Security (особенно JwtBearerHandler а также JwtBearerMiddleware классы), что привело меня к пространству имен Microsoft.IdentityModel, которое находится в репозитории Azure Extensions (сначала ConfigurationManager<T> класс, то к OpenIdConnectConfigurationRetriever учебный класс (GetAsync метод), то к JsonWebKeySet.GetSigningKeys() метод), я наконец обнаружил, что JwtBearerMiddleware действительно получает ключи от jwks_uri в метаданных. Уф.

Так почему же это не сработало? Что я должен был проверить ранее, так это то, что ребенок в заголовке Bearer JWT на самом деле не совпадал ни с одним из детей из jwks_uri, следовательно, он не был найден. Это был код доступа, который я отправлял как токен на предъявителя. У id_token, с другой стороны, есть соответствующий ребенок, так что вместо этого это сработало!

С тех пор я прочитал:

Токен доступа OIDC применим только для конечной точки Okta /oauth2/v1/userinfo и поэтому должен рассматриваться приложением как непрозрачный. Приложению не нужно проверять его, так как его не следует использовать против других серверов ресурсов. Формат и ключ, используемый для его подписания, могут быть изменены без предварительного уведомления. источник

... так что я не могу использовать токен доступа.

Другие вопросы по тегам