问题标签 [flask-jwt-extended]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
jwt - flask-jwt-extended - Catch raise RevokedTokenError('Token has been revoked')
我已经尝试阅读文档以及尝试更改默认行为https://flask-jwt-extended.readthedocs.io/en/latest/sharing_default_behavior.html来处理错误(链接显示如何处理过期令牌)和在谷歌搜索我可以做的每个关键字组合中的所有内容,但似乎没有人有这方面的例子。
我尝试使用@jwt.revoked_token_loader 来处理 RevokedTokenError 但它似乎不起作用,因为我像这样应用它
实际上,我不确切知道处理过期令牌的链接上的示例如何具有“expired_token”参数,这种自我声明是否像我在上面对“revoked_token”所做的那样?据我所知,'jti' 就像 flask-jwt-extended 包中的默认值,因为每当我不使用它时我都会看到错误(在我的数据库中,它是不同的,但根本没有问题。
我尝试按照本教程进行操作,并且对我来说效果很好(以及他的原始代码源),但我发现这个在 Revoke Tokens https://codeburst.io/jwt-authorization-上也没有捕获异常在烧瓶中-c63c1acf4eeb
我使用邮递员,如果基于教程链接,这就是我得到这个的方法
在最后一个之后,我在服务器端(ide)收到此错误:
在邮递员中,这就是我得到的:
我的目标是发送自定义 json 响应而不是“内部服务器错误”
编辑:我不是编程等方面的奇才,是一个想要练习 Python 安全 Web 开发的初学者。我还不太明白装饰器在应用程序等方面是如何工作的,所以我不知道其他人是否调整了 flask-jwt-extended 包来解决这些问题。
python - 如何使用来自不同发行者的 jwt?
我正在构建一个烧瓶 API,它将操纵要在 thingsboard 中使用的数据。
长话短说,客户通过 thingsboard 登录,从中获取 jwt。
但是 API 拒绝 jwt 说签名验证失败。
双方都使用相同的密钥。
两个thingboard都在远程服务器上,API目前在开发过程中是本地的。
jwt 操作新手,我错过了什么?
flask - 如何在烧瓶中设置持久的 JWT 令牌标头?
如果没有 Javascript 的帮助,我似乎找不到将 JWT 令牌设置为每个 HTTP 请求中的标头的方法。
目前,我的应用程序设置为使用“set_access_cookies”和“unset_access_cookies”方法来跟踪会话。但是,仅取消设置 cookie 不会使 cookie 无效。因此,我想在标头中使用 JWT,以便我可以使用 blacklist.add() 方法,因为 blacklist.add() 似乎无法从我的测试中查看 cookie。
我的登录功能:
我的注销功能:
这很好用,但是有没有一种简单的方法可以将 JWT 放置为持久标头?
python - 如何将 Plotly dash 应用程序放在受保护的路线后面
我有一个 plotly dash 应用程序,我想将它放在受 JWT 保护的路线后面。我的最终目标是将其包含在单独路线上的 iframe 中,但我只希望用户能够获得 dash 应用程序的 html,如果他们有访问令牌。
我已重试在获取请求中返回应用程序本身。
应用程序.py
索引.py
ip - 如果过期,则允许 JWT 令牌,前提是用户来自受信任的 IP 地址
使用flask-jwt-extended,我遇到了这样一种情况,即API 必须同时为用户和一系列Web 应用程序(例如,其中一个是聊天机器人)提供服务。
对于用户来说,开箱即用的包功能非常完美,但是,对于 Web 应用程序,我希望 JWT 令牌的行为更像 API 密钥,它们不一定会在一段时间后过期。
所以我想做的是,如果请求来自预定义且受信任的 IP 地址,则禁止对“到期”的检查。
我有一个存储受信任的“IP 地址”的 sqlalchemy 模型,它与用户模型具有外键关系,这意味着用户可以指定一个(或多个)列入白名单的 IP 地址。
现在的decode_token
功能:
有一个参数allow_expired
,它允许覆盖过期时间,但是,它不会在_decode_jwt_from_request(...)
函数中以任何方式使用,这在验证 JWT 令牌时似乎很有用。
最终,我将装饰器替换为@jwt_required
,它允许使用过期的令牌,前提是请求来自列入白名单的 IP 地址。
我的问题是双重的:
- 从安全的角度来看,上述结构可以吗?
- 无需从库中复制(并稍微修改)整个函数,我该如何进行上述操作?
flask - @JWT_Required 装饰器异常处理
我正在使用使用 JWT 的身份验证 API,它工作得很好。此 API 用于为我的网络应用程序授权用户。为此,我使用 Flask 手动将 JWT access_tokens 存储为 cookie。我使用 @JWT_required 装饰器保护我的资源,如果我尝试使用有效令牌访问安全资源,一切正常。但是,如果访问令牌丢失或无效/过期,我会收到一条 JSON 消息:
这显然是正确的消息,而不是显示我想要重定向到 Flask 提供的相应状态码错误页面的 JSON - 在本例中为 401。
- 我尝试为 Flask 和 JWT Manager 添加错误处理
- 自定义装饰器,虽然我在这方面表现不佳,因为我相信在 FLASK-JWT-extended 中必须有解决方案
如果访问令牌有任何问题,我的目标是重定向到相应的错误页面 404、403、401。
解决方案:
python - 有没有办法让租户特定的 JWT 令牌
我目前正在使用后端的 Python/Flask API 开发一个 SPA 应用程序(角度)。
该应用程序将支持多个租户,我在安全概念上有点挣扎。我目前正在使用 jwt-extended
颁发的 JWT 令牌对所有租户都有效(我当然可以从令牌中获取用户,然后检查用户是否应该有权访问该租户),但我更希望拥有特定于租户的 JWT 令牌(以便用户被@jwt_required 阻止)。
我的想法是为每个租户设置不同的 JWT_SECRET_KEY(例如将租户附加到我的密钥),然后检查每个租户的令牌的有效性(租户将由 url 标识,作为子域或参数)
默认情况下,密钥在应用程序级别(使用 app.config('JWT_SECRET_KEY') 但看起来您可以覆盖flask_jwt_extended.JWTManager 中的密钥编码/解码函数。但是我不确定我必须覆盖哪些函数让我的@jwt_required 工作我想要的(因此在解码中使用自定义密钥,该密钥将作为我的密钥+租户的连接生成)
如果我的概念没有意义/如果有更好和/或更简单的方法来实现这一点,请告诉我。
flask - 结合 Web 应用程序和 api 的用户身份验证最佳实践
我正在使用烧瓶登录进行用户身份验证的烧瓶 Web 应用程序。现在当前的布局正在经历一些变化,并且决定一些组件应该从服务器获取数据以便根据用户请求进行更新。我打算创建一些 api 路由,但我不确定现在应该如何处理访问这些路由的用户身份验证。我很高兴听到在这些情况下的最佳做法是什么。
谢谢
flask-jwt-extended - 使用 flask-jwt-extended 使用自定义装饰器强制页面重定向令牌错误
我正在使用 Flask JWT-Extended 库来实现 JWT 访问令牌。当用户的令牌过期、无效或不存在时,默认情况下 Flask 返回如下 JSON:
{"msg": "Missing cookie \"access_token_cookie\""}
我想制作一个包装器,@jwt_required
但会进行内部重定向(如登录页面),而不是像上面那样返回 JSON。
这是一个示例装饰器:
和一个示例页面保护页面路由,如果发生任何类型的令牌错误,我希望 Flask 将用户重定向到:
我的问题是我无法弄清楚如何使用重定向覆盖默认的 JSON 返回。如果有任何错误,则忽略逻辑而不是 wrap 函数,并输出某种错误消息。
有没有更好的方法来使用新的装饰器覆盖默认行为?
flask - Flask JWT 扩展“不允许指定的 alg 值”错误
当向需要使用 JWT 访问的烧瓶路由发出请求时(@jwt_required
烧瓶休息资源上的装饰器),我收到一条422 UNPROCESSABLE ENTITY
消息:The specified alg value is not allowed
.
登录并导航到调用请求的(前端)路由时:
同样,它按预期工作,但是在刷新时它会显示 422 错误。我将令牌存储在 localstorage 中并将其加载到 axios 标头中,如下所示:
init()
并打电话给setHeader()
我main.js
,所以我很困惑为什么这只是在刷新后才导致错误。
我无法找到任何有关如何纠正The specified alg value is not allowed
错误的资源。任何援助将不胜感激!:)