JavaScript应用无法从WSO2网关URL生成AccessToken,遇CORS问题
解决步骤
- 处理OPTIONS预检请求
浏览器发起跨域POST请求前会先发送OPTIONS预检请求,当前TokenAPI仅配置了POST方法的处理,需添加OPTIONS方法的处理逻辑。在_TokenAPI_.xml中新增一个resource节点:
<resource methods="OPTIONS" url-mapping="/*"> <inSequence> <!-- 生产环境请替换为具体允许的前端域名,不要用* --> <property name="Access-Control-Allow-Origin" scope="transport" value="*"/> <property name="Access-Control-Allow-Methods" scope="transport" value="POST, OPTIONS"/> <property name="Access-Control-Allow-Headers" scope="transport" value="authorization,Content-Type,Accept"/> <property name="Access-Control-Allow-Credentials" scope="transport" value="true"/> <respond/> </inSequence> </resource>
- 补充outSequence中的CORS响应头
当前outSequence缺少关键的Access-Control-Allow-Origin头,修改outSequence:
<outSequence> <property name="Access-Control-Allow-Origin" scope="transport" value="*"/> <!-- 生产环境替换为指定域名 --> <property name="Access-Control-Allow-Headers" scope="transport" value="authorization,Content-Type,Accept"/> <send/> </outSequence>
- 验证全局CORS配置
检查<API_M>/repository/conf/api-manager.xml中的<CORSConfiguration>节点,确保配置正确启用:
<CORSConfiguration> <Enabled>true</Enabled> <Access-Control-Allow-Origin>*</Access-Control-Allow-Origin> <!-- 生产环境指定具体域名 --> <Access-Control-Allow-Methods>GET,PUT,POST,DELETE,PATCH,OPTIONS</Access-Control-Allow-Methods> <Access-Control-Allow-Headers>authorization,Content-Type,Accept</Access-Control-Allow-Headers> <Access-Control-Allow-Credentials>true</Access-Control-Allow-Credentials> </CORSConfiguration>
- 重启WSO2服务
所有配置修改完成后,必须重启WSO2 API Manager服务,确保配置生效。
内容的提问来源于stack exchange,提问作者Partha Nath
相关产品推荐
相关产品推荐

