如何 return 来自 Flask 的不记名 JWT 令牌?
How to return a bearer JWT token FROM Flask?
如何从 Flask python 服务器形成响应,该响应将在响应中包含不记名令牌。更准确地说,我希望以某种方式安全地将 JWT 令牌从 Flask python 服务器传播回客户端(angular 页面)。我可以在 GET 重定向中以查询字符串的形式 return 它。就 return 将 JWT 访问令牌返回客户端而言,还有哪些其他可能性?我尝试设置响应表单 python,并在授权字段中设置 jwt 令牌,但没有任何效果。这是我试过的:
1.
r = Response(headers={
"Authorization": "bearer jwtcntent",
"Access-Control-Allow-Origin": "*",
},
is_redirect=True,
url="https://localhost:5000/callback",
)
return r
r = redirect("http://localhost:5000/callback")
r.headers = {"authorization": "bearer jwtcntent"}
return r
r = Response(headers={
"Authorization": "Bearer jwtcntent",
"Access-Control-Allow-Origin": "*",
},
allow_redirects=True,
url="https://localhost:5000/callback",
)
return r
有什么建议吗?
您可以将其存储在 httponly cookie 中,但如果这样做,您需要确保能够处理 CSRF 攻击。 Flask-JWT-Extended 内置了对此的支持,您可能会发现它很有用,无论是作为解决方案还是作为您最终所做的事情的参考:
https://flask-jwt-extended.readthedocs.io/en/stable/token_locations/#cookies
您也可以将令牌作为 JSON 正文的一部分发回,然后将其存储在 local/session 存储中,这可能是最常见的模式。
您能否在您的授权服务器中实施常规 OAuth 流程? OAuth 流程是标准化的,并使用安全的方式将访问令牌返回给客户端。
我不建议使用 Authorization
header 返回响应。这个header是一个请求header,在响应中是没有意义的。如果您确实需要通过 header 完成此操作,您可以添加 Access-Control-Expose-Headers header 让您的客户从响应中读取 Authorization
header。
如何从 Flask python 服务器形成响应,该响应将在响应中包含不记名令牌。更准确地说,我希望以某种方式安全地将 JWT 令牌从 Flask python 服务器传播回客户端(angular 页面)。我可以在 GET 重定向中以查询字符串的形式 return 它。就 return 将 JWT 访问令牌返回客户端而言,还有哪些其他可能性?我尝试设置响应表单 python,并在授权字段中设置 jwt 令牌,但没有任何效果。这是我试过的:
1.
r = Response(headers={
"Authorization": "bearer jwtcntent",
"Access-Control-Allow-Origin": "*",
},
is_redirect=True,
url="https://localhost:5000/callback",
)
return r
r = redirect("http://localhost:5000/callback")
r.headers = {"authorization": "bearer jwtcntent"}
return r
r = Response(headers={
"Authorization": "Bearer jwtcntent",
"Access-Control-Allow-Origin": "*",
},
allow_redirects=True,
url="https://localhost:5000/callback",
)
return r
有什么建议吗?
您可以将其存储在 httponly cookie 中,但如果这样做,您需要确保能够处理 CSRF 攻击。 Flask-JWT-Extended 内置了对此的支持,您可能会发现它很有用,无论是作为解决方案还是作为您最终所做的事情的参考:
https://flask-jwt-extended.readthedocs.io/en/stable/token_locations/#cookies
您也可以将令牌作为 JSON 正文的一部分发回,然后将其存储在 local/session 存储中,这可能是最常见的模式。
您能否在您的授权服务器中实施常规 OAuth 流程? OAuth 流程是标准化的,并使用安全的方式将访问令牌返回给客户端。
我不建议使用 Authorization
header 返回响应。这个header是一个请求header,在响应中是没有意义的。如果您确实需要通过 header 完成此操作,您可以添加 Access-Control-Expose-Headers header 让您的客户从响应中读取 Authorization
header。