意图
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
答案 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。 您还有其他建议吗?
我真的被困在这里,直到问题解决后才能使用网关。
非常感谢您,
欢呼