Я пытаюсь реализовать проверку JWT, как показано в этом видео .
Для этого я применил следующие политики:
<policies>
<inbound>
<validate-jwt header-name="Authorization" failed-validation-httpcode="401" failed-validation-error-message="No auth" require-expiration-time="false" require-signed-tokens="false">
<issuer-signing-keys>
<key> base64key </key>
</issuer-signing-keys>
</validate-jwt>
<return-response>
<set-status code="200" reason="OK" />
<set-body>test</set-body>
</return-response>
<base />
</inbound>
<backend>
<base />
</backend>
<outbound>
<base />
</outbound>
<on-error>
<base />
</on-error>
require-подписанные токены и require-expiration-time будут включены в производство - я пытался отключить столько проверки, сколько смогу, просто чтобы запустить это.
Затем на JWT.io я генерирую токен:
Тогда пришло время получить некоторые данные из API:
import urllib.request
headers = {"Authorization": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOiIxNTM0MDAzOTk4In0.0DlazlR4-InCb-m0dBs-9BbPbyvu5s7Opr8uXIUaMdA"}
api_request = urllib.request.Request("https://someapi", headers=headers)
try:
api_response = urllib.request.urlopen(api_request)
print(api_response.read())
except urllib.error.HTTPError as e:
print(e.read())
Обратите внимание, что заголовка Ocp-Apim-Subscription-Key нет, поскольку для продукта, содержащего API, подписка не требуется, вы также протестировали ее с ней.
И результат:
b'{ "statusCode": 401, "message": "No auth" }'
Трассировка запроса API не предоставляет никакой полезной информации.
Есть что-нибудь очевидное, что я пропускаю?