我只是为我的所有操作设置了一个 CORS 策略,如下所示:
<policies>
<inbound>
<base />
<cors>
<allowed-origins>
<origin>http://localhost:3000</origin>
</allowed-origins>
<allowed-methods>
<method>GET</method>
<method>POST</method>
</allowed-methods>
</cors>
<validate-jwt header-name="Authorization" failed-validation-httpcode="401" failed-validation-error-message="Failed.">
<openid-config url="https://*/.well-known/openid-configuration" />
<audiences>
<audience>ticket-spa</audience>
</audiences>
<issuers>
<issuer>https://*/</issuer>
</issuers>
</validate-jwt>
<set-header name="X-JWT-SUB" exists-action="override">
<value>@(context.Request.Headers["Authorization"].First().Split(' ')[1].AsJwt()?.Claims["sub"].FirstOrDefault())</value>
</set-header>
</inbound>
<backend>
<base />
</backend>
<outbound>
<base />
</outbound>
<on-error>
<base />
</on-error>
</policies>
但是,OPTIONS 请求 https://*.azure-api.net/myFunctions/items?param=1 导致以下响应:
HTTP/1.1 200 OK
Request-Context: appId=*
Date: Wed, 03 Jun 2020 07:22:47 GMT
Content-Length: 0
这导致浏览器不允许与我的 API 通信,因为缺少 CORS 标头。
似乎我不得不添加一些允许的标题,如下所示:
<allowed-headers>
<header>content-type</header>
<header>accept</header>
<header>x-tfs-fedauthredirect</header>
<header>user-agent</header>
<header>authorization</header>
</allowed-headers>
仍然很奇怪,没有错误指示为什么失败。