2016-07-15 2 views
8

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

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

Соответствующий код в запуске .cs выглядит следующим образом:

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

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

+0

Можете ли вы опубликовать информацию об исключениях (включить журнал и просмотреть журналы ошибок)? –

+0

@ademcaglin У меня возникли проблемы с попыткой добраться до этих деталей, поскольку все это происходит в библиотеке nuget. И я не вижу нигде в точке останова. – Steve

ответ

9

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

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

Я так читать:

РСИН Токен доступа применим только для окта /oauth2/v1/USERINFO конечной точки и, таким образом, следует рассматривать как непрозрачной приложения. Приложению не нужно проверять его, так как он не должен использоваться с другими серверами ресурсов . Формат его и ключ, используемый для его подписания, могут быть изменены без предварительного уведомления . source

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

+0

Полезный, ..thanks – Coding4Fun

Смежные вопросы