Express Gateway CORS + apiKey授权401未经授权

时间:2019-07-16 10:48:05

标签: cors express-gateway

意图

CORS配置似乎有效并且可以工作,在React-App中,我可以轻松访问网关。也可以通过邮递员进行访问,因此apiKey不会引起问题。

但是,如果我使用apiKey添加身份验证,则会在所有浏览器中收到错误消息。 在Chrome中:

问题

  

选项https://example-gateway.com/test 401   (未经授权)

     

在以下位置访问XMLHttpRequest   原产地的“ https://example-gateway.com/test”   “ https://example-app.com”已被CORS屏蔽   策略:对预检请求的响应未通过访问控制   检查:它没有HTTP正常状态。

是什么原因导致这种现象?浏览器是否不会通过OPTIONS-CORS请求发送所需的apiKey并因此被阻止?

如何解决?

代码

pipelines:
  adminAPI:
    apiEndpoints:
      - testApi
    policies:
      - cors:
          - action:
              origin: [https://example-gateway.com]
              methods: GET,POST,PUT,DELETE,OPTIONS
              preflightContinue: true
              optionsSuccessStatus: 204
              credentials: true
              maxAge: 600
              allowedHeaders:
                - Authorization
              exposedHeaders:
                - Authorization
      - key-auth:
          - action:
              apiKeyHeader: Authorization
              disableHeadersScheme: false
      - proxy:
          - action:
              serviceEndpoint: testBackend

2 个答案:

答案 0 :(得分:0)

我认为问题在于key-auth的CORS的OPTION调用返回401,这就是为什么您可能会收到此类问题的原因。

您很可能可以通过在密钥验证调用中添加条件来解决此问题。

答案 1 :(得分:0)

非常感谢您的回答!

按照您的建议,我检查了有关表达式/条件的文档,并在此基础上尝试了以下方法:

- key-auth: - condition: name: not condition: name: method methods: - OPTIONS action: apiKeyHeader: Authorization disableHeadersScheme: false

目标:仅当请求方法不是“ OPTIONS”时,才需要进行身份验证。

不幸的是,结果仍然是401 Unauthorized Error。 您还有其他建议吗?

我真的被困在这里,直到问题解决后才能使用网关。

非常感谢您,

欢呼