Как проверить ошибку при проверке токена jwt с помощью validate-jwt (Ранее: Как использовать пользовательский встроенный jwt в validate-jwt?) - PullRequest
0 голосов
/ 29 октября 2019

Я пытаюсь ограничить доступ к REST API, используя токен JWT, используя политику validate-jwt. Никогда раньше этого не делал.

Вот моя входящая политика (взятая из пункта Простая проверка токена здесь ):

<validate-jwt header-name="Authorization" require-scheme="Bearer">
    <issuer-signing-keys>
        <key>{{jwt-signing-key}}</key>
    </issuer-signing-keys>
    <audiences>
        <audience>CustomerNameNotDns</audience>
    </audiences>
    <issuers>
        <issuer>MyCompanyNameNotDns</issuer>
    </issuers>
</validate-jwt>

Использование этот генератор Я создал заявку (не уверен, правильно ли я понял издателя и аудиторию):

{
    "iss": "MyCompanyNameNotDns",
    "iat": 1572360380,
    "exp": 2361278784,
    "aud": "CustomerNameNotDns",
    "sub": "Auth"
}

В разделе Подписанный веб-токен JSON Я выбрал Генерация 64-битного ключа из поля со списком. Ключ, который был сгенерирован, я положил вместо {{jwt-signature-key}} .

Теперь я пытаюсь вызвать API с помощью Postman. Я добавляю заголовок «Авторизация» и в качестве значения добавляю «Носитель {{JWT, созданный связанным генератором }}».

Я получаю 401, JWT не присутствует. Что я делаю не так?

Ответы [ 2 ]

1 голос
/ 30 октября 2019

Согласно моим исследованиям, если вы используете алгоритмы подписывания HS256, ключ должен быть предоставлен в рамках политики в закодированной форме base64. Другими словами, мы должны закодировать ключ как строку base64. Для получения более подробной информации, пожалуйста, обратитесь к документу enter image description here

Мои тестовые шаги следующие:

  1. Создать Jwtтокен enter image description here enter image description here

  2. Тест а. Если я непосредственно предоставляю ключ в полисе, я получаю ошибку 401 enter image description here

enter image description here

б. Если я закодирую ключ как строку base64 в политике, я могу вызвать API enter image description here enter image description here

0 голосов
/ 06 ноября 2019

Ответ Джима Сюя для кодирования ключа в виде строки base64 в политике позволил мне зайти так далеко: -)

Я установил Ocp-Apim-Trace параметр в true для более точной отладки. Я перешел по ссылке, приведенной в ответе в ocp-apim-trace-location , и в разделе «При ошибке» обнаружил следующее сообщение:

JWT Validation Failed: IDX10225: Lifetime validation failed. The token is missing an Expiration Time. Tokentype: 'System.IdentityModel.Tokens.Jwt.JwtSecurityToken'..

Что смешно,потому что я установил Время истечения ... на 2099.

Я изменил его на месяц, и он работал просто отлично.

...