【问题标题】:Flask JWT Extended "The specified alg value is not allowed" ErrorFlask JWT 扩展“不允许指定的 alg 值”错误
【发布时间】:2020-02-19 04:31:20
【问题描述】:

当使用(@jwt_requiredflask-restful 资源上的装饰器)向需要 JWT 访问的烧瓶路由发出请求时,我收到带有消息的422 UNPROCESSABLE ENTITYThe specified alg value is not allowed

登录并导航到调用请求的(前端)路由时:

this.axios.get("/jobs").then(res => {
      console.log(res.data);
      this.jobs = res.data.jobs;
    });

同样,它按预期工作,但是在刷新时它会显示 422 错误。 我将令牌存储在 localstorage 中并将其加载到 axios 标头中,如下所示:

const api = {
  init: function() {
    Vue.use(VueAxios, axios);
    Vue.axios.defaults.baseURL = DEV_URL;
  },

  setHeader: function() {
    const token = `Bearer ${getToken()}`;
    Vue.axios.defaults.headers.common["Authorization"] = token;
  },
};

并在我的main.js 中调用init()setHeader(),所以我很困惑为什么只有在刷新后才会导致错误。

我找不到任何有关如何纠正 The specified alg value is not allowed 错误的资源。任何援助将不胜感激! :)

【问题讨论】:

  • 您能告诉我们您是如何生成令牌的吗? jwt 使用的算法存储在the header 中 - 您可以在config options 中设置jwt-extended 使用的算法。 jwt-extended git repo 中的测试显示了算法的差异如何导致您遇到的错误。
  • @elembie 感谢您的回复。我一直在关注文档中的基本用法。我设置的唯一配置选项是JWT_SECRET_KEYJWT_BLACKLIST_ENABLEDJWT_BLACKLIST_TOKEN_CHECKS。我没有改变默认算法。令牌的生成者:access_token = create_access_token(identity=data["username"])
  • 我也刚刚尝试将JWT_ALGORITHM 更改为RS256 并设置了私钥和公钥,但仍然有同样的问题
  • 您是否验证过从安全存储中正确检索令牌?我只是在想jwt 可能已经以某种方式被修改了——也许在服务器和客户端上打印出来并检查它没有改变。

标签: flask jwt axios flask-jwt-extended flask-jwt


【解决方案1】:

在我的 Spring Boot 身份验证服务中创建 JWT 令牌但资源服务是一个烧瓶微服务时,我遇到了同样的问题。我尝试了以下步骤来整理它,

  • 我将令牌粘贴到 jwt.io 调试器中。
  • 在右侧,我找到了解码后的标头,其中 alg 值如下,
    {
      "alg": "HS512"
    }
  • 我把alg放在flask资源服务器的app config中如下,
    app.config['JWT_ALGORITHM'] = 'HS512'

在那之后错误消息消失了,我能够从解码的令牌中解析信息。所以需要找到生成token的算法,并在flaskapp.config中设置合适的算法。

【讨论】:

    【解决方案2】:

    如果令牌是使用与 app.config['JWT_ALGORITHM'] 不同的算法创建的,则可能会发生这种情况

    【讨论】:

      猜你喜欢
      • 2020-03-07
      • 2020-01-30
      • 2021-06-24
      • 2018-04-02
      • 2021-04-08
      • 1970-01-01
      • 2014-01-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多