【发布时间】:2018-06-26 09:28:45
【问题描述】:
我正在尝试实现 JWT 验证,如 this video 中所示。
为实现这一目标,我实施了以下政策:
<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-signed-tokens 和 require-expiration-time 将在生产中启用 - 我试图尽可能多地禁用验证以使其运行.
那么是时候从 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 请求跟踪没有提供任何有用的信息。
我有什么明显的遗漏吗?
【问题讨论】:
-
如果您的策略与上面显示的完全一样,则您的密钥中有一个前导和一个尾随空格:
<key> base64key </key> -
@jps 我刚刚在此处添加了它们。
-
参考此链接:feedback.azure.com/forums/248703-api-management/suggestions/…,您可能会对此问题有所了解。
标签: azure jwt azure-api-management