使用JWT令牌访问API时的CORS问题

时间:2017-11-13 14:36:22

标签: php cors symfony-3.2 lexikjwtauthbundle

使用JWT令牌从角度访问Symfony REST API时,我遇到了CORS问题。

IIS服务器已配置为使用域名和IP地址访问应用程序。前端代码与Symfony位于同一目录中。

前端使用域名调用API。使用JWT令牌从IP地址访问应用程序会产生CORS问题,因为API指向域名。

我在内核侦听器中设置了以下选项的响应头。

我正在使用lexik / jwt-authentication-bundle来生成令牌

$responseHeaders->set('Access-Control-Allow-Headers', 'origin, content-type, accept,authorization');
$responseHeaders->set('Access-Control-Allow-Origin', '*');
$responseHeaders->set('Access-Control-Allow-Methods', 'POST, GET, PUT, DELETE, PATCH, OPTIONS');
$responseHeaders->set('Access-Control-Allow-Credentials', true);

我还使用以下选项设置了Nelmio CORS捆绑包

enter code hernelmio_cors:
    defaults:
        allow_credentials: false
        allow_origin: []
        allow_headers: []
        allow_methods: []
        expose_headers: []
        max_age: 0
        hosts: []
        origin_regex: false
        forced_allow_origin_value: ~        
    paths:
        '^/api/':
            allow_origin: ['*']
            allow_headers: ['*']
            allow_methods: ['POST', 'PUT', 'GET', 'DELETE']
            max_age: 3600
        '^/':
            allow_origin: ['*']
            allow_headers: ['*']
            allow_methods: ['POST', 'PUT', 'GET', 'DELETE']
            max_age: 3600e

响应标题:

允许
选项,追踪,获取,头,后 内容长度
0 日期
2017年11月13日星期一16:03:22 GMT 公共
选项,追踪,获取,头,后 服务器
微软IIS / 10.0 X-火狐,SPDY
H2

提前致谢!

1 个答案:

答案 0 :(得分:2)

我的web.config(Symfony 4):

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
    <rewrite>
        <rules>
            <rule name="Imported Rule 1" stopProcessing="true">
                <match url="^(.*)$" ignoreCase="false" />
                <conditions logicalGrouping="MatchAll">
                    <add input="{REQUEST_FILENAME}" matchType="IsFile" ignoreCase="false" negate="true" />
                </conditions>
                <action type="Rewrite" url="index.php" appendQueryString="true" />
            </rule>
        </rules>
    </rewrite>
    <httpProtocol>
     <customHeaders>
       <add name="Access-Control-Allow-Headers" value="origin, content-type, accept,authorization" />
       <add name="Access-Control-Allow-Origin" value="*" />
       <add name="Access-Control-Allow-Methods" value="POST, GET, PUT, DELETE, PATCH, OPTIONS" />
       <add name="Access-Control-Allow-Credentials" value="true" />
     </customHeaders>
   </httpProtocol>
</system.webServer>
</configuration>