【发布时间】:2020-02-19 04:31:20
【问题描述】:
当使用(@jwt_requiredflask-restful 资源上的装饰器)向需要 JWT 访问的烧瓶路由发出请求时,我收到带有消息的422 UNPROCESSABLE ENTITY:The 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-extendedgit repo 中的测试显示了算法的差异如何导致您遇到的错误。 -
@elembie 感谢您的回复。我一直在关注文档中的基本用法。我设置的唯一配置选项是
JWT_SECRET_KEY、JWT_BLACKLIST_ENABLED和JWT_BLACKLIST_TOKEN_CHECKS。我没有改变默认算法。令牌的生成者:access_token = create_access_token(identity=data["username"])。 -
我也刚刚尝试将
JWT_ALGORITHM更改为RS256并设置了私钥和公钥,但仍然有同样的问题 -
您是否验证过从安全存储中正确检索令牌?我只是在想
jwt可能已经以某种方式被修改了——也许在服务器和客户端上打印出来并检查它没有改变。
标签: flask jwt axios flask-jwt-extended flask-jwt