首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Express网关jwt返回未经授权

Express网关jwt返回未经授权
EN

Stack Overflow用户
提问于 2019-12-04 14:23:06
回答 1查看 469关注 0票数 1

我在快速网关上尝试jwt。但从配置gateway.config.yml来看,它与文档一致。但是,这总是返回未授权的结果。我的gateway.config.yml:

代码语言:javascript
复制
http:
  port: 8080
apiEndpoints:
  crudAPI:
    host: localhost
    paths:
      - '/users/get-user-data'
      - '/users/delete-user-data'
      - '/users/add-user-data'
      - '/users/get-one-user-data/*'
      - '/users/update-user-data'
      - '/users/update-pass-user-data'
serviceEndpoints:
  crudService:
    url: 'http://localhost:3004'
policies:
  - proxy
  - log
  - jwt
pipelines:
  crud:
    apiEndpoints:
      - crudAPI
    policies:
      - log:
        - action:
            message: "header===> ${req.headers.authorization}"
      - jwt:
        - action:
            secretOrPublicKey: 'secretAuth'
            checkCredentialExistence: false
            # passThrough: true
      - proxy:
        - action:
            serviceEndpoint: crudService

如果passThrough设置为true,它将正常工作。出了什么问题?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-12-05 14:38:06

这在EG中工作得很好。只有我在后端API上的JWT上犯了一个错误。感谢您在百忙之中抽出时间调查此案。我非常感谢能与EG一起工作。

鉴权JWT时我的后台API:

代码语言:javascript
复制
// JSON WEB TOKEN STRATEGY
passport.use(new JwtStrategy({
    // jwtFromRequest: ExtractJwt.fromHeader('authorization'), // WRONG
    jwtFromRequest: ExtractJwt.fromAuthHeaderAsBearerToken(),  // CORRECT
    secretOrKey: config.JWT_SECRET
}, async (payload, done) => {
    try {
        // find user specified in token
        const user = await User.findById(payload.sub);

        // handle if user doesnt exist
        if(!user) {
            return done(null, false);
        }

        // return the user
        done(null, user);
    } catch (error) {
        done(error, false);
    }
}));
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59170038

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档