我在这里关注文档:https://fusionauth.io/docs/v1/tech/apis/jwt
并尝试获得新的JWT,以访问同一租户中的第二个应用程序。我使用httpie而不是curl来获取访问令牌:
source config.sh
ACCESS_TOKEN=`http POST "${URL}/api/login" \
"Authorization:${API_KEY}" \
"X-FusionAuth-TenantId:${TENANT1_ID}" \
"applicationId=${APP1_ID}" \
"loginId=${USER}" \
"password=${PASS}" \
| python -m json.tool | grep token | cut -f4 -d'"'`
echo ${ACCESS_TOKEN}
,然后在以下请求中使用此访问令牌来访问第二个应用程序:
source config.sh
JWT=`bash access_token.sh`
http GET ${URL}/api/jwt/issue \
"Authorization: JWT ${JWT}" \
"Cookie: access_token=${JWT}" \
"applicationId=${APP2_ID}"
#http GET ${URL}/api/user \
# "Authorization: JWT ${JWT}"
注意,对/ api / user的注释请求工作正常,但是对/ api / jwt / issue的请求返回401。
如何解决此错误?
答案 0 :(得分:1)
applicationId
必须通过请求参数。
https://fusionauth.io/docs/v1/tech/apis/jwt
使用httpie
时,单等号=
表示该参数将在请求正文中序列化为JSON,而双等号==
表示该参数将追加到请求URI。
httpie
帮助文本:
'=='要附加到请求URI的URL参数:
search==httpie
'='数据字段要序列化为JSON对象(使用--json,-j) 或表单数据(带有--form,-f):
name=HTTPie language=Python description='CLI HTTP client'
尝试修改您的请求,以对==
参数使用双等于applicationId
。
http GET ${URL}/api/jwt/issue \
"Authorization: JWT ${JWT}" \
"applicationId==${APP2_ID}"
此外,您只需要发送cookie或Authorization
标头。如果同时发送两个Authorization
标头,则将优先。
https://fusionauth.io/docs/v1/tech/apis/authentication#jwt-authentication