跨域 Ajax 请求 WSO2 IS
Cross-Domain Ajax Requests WSO2 IS
curl -v -X POST -H "Authorization: Basic <base64 encoded client id:client secret value>" -k -d "grant_type=password&username=<username>&password=<password>" -H "Content-Type:application/x-www-form-urlencoded" https://localhost:9443/oauth2/token
(来自 https://docs.wso2.com/display/IS520/Resource+Owner+Password+Credentials+Grant
)
此'curl' 命令运行良好。但是当尝试通过 ajax:
调用它时
$.ajax({
type: 'POST',
data: 'grant_type=password&username=admin&password=admin',
headers: {
'Content-Type': 'application/x-www-form-urlencoded',
'Authorization': 'Basic Z0hLUlA3eThYTmJydl9JR1pJemxDQ1VJQlo0YTozT2VLaUlmUVViMk1yZzZ2YU5uQVFsWFpDU29h'
},
url: 'https://localhost:9443/oauth2/token',
success: function(data) {
console.log(data);
}
})
};
我收到这个错误:"XMLHttpRequest cannot load https://localhost:9443/oauth2/token. Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'null' is therefore not allowed access."
我如何配置 WSO2 IS 来处理它?或者有替代方案吗?
WSO2 API 管理器 () 也存在类似问题。但是WSO2 IS中没有这样的目录'/repository/deployment/server/synapse-configs/'。
我不认为 return 的 CORS headers 的令牌 API。要使其正常工作,您可以通过 API 经理在 IS 的前端令牌 API。默认情况下,您在其中创建的所有 REST APIs 中的 APIM returns CORS headers。
事实上,API 经理发送了一个 API(即 https://localhost:8243/token
),它位于 IS 的令牌 API(即 https://localhost:9443/oauth2/token
)的前面(注意: APIM 中安装了某些 IS 功能)。但它也不 return CORS headers。要使其成为 return CORS headers,您应该遵循您提到的 SO link。
另一个简单的选择是,如果你只需要 CORS headers,你可以简单地通过另一个自定义服务将 IS 的 Token API 前置 returns CORS headers在响应中。
这是在 Identity Server 上未启用跨源资源共享 (CORS) 时的预期行为。事实上,您可以为 Identity Server 启用 CORS。查看 [1] 如何操作。
[1] http://hasanthipurnima.blogspot.com/2016/05/applying-cors-filter-to-wso2-identity.html
curl -v -X POST -H "Authorization: Basic <base64 encoded client id:client secret value>" -k -d "grant_type=password&username=<username>&password=<password>" -H "Content-Type:application/x-www-form-urlencoded" https://localhost:9443/oauth2/token
(来自 https://docs.wso2.com/display/IS520/Resource+Owner+Password+Credentials+Grant )
此'curl' 命令运行良好。但是当尝试通过 ajax:
调用它时 $.ajax({
type: 'POST',
data: 'grant_type=password&username=admin&password=admin',
headers: {
'Content-Type': 'application/x-www-form-urlencoded',
'Authorization': 'Basic Z0hLUlA3eThYTmJydl9JR1pJemxDQ1VJQlo0YTozT2VLaUlmUVViMk1yZzZ2YU5uQVFsWFpDU29h'
},
url: 'https://localhost:9443/oauth2/token',
success: function(data) {
console.log(data);
}
})
};
我收到这个错误:"XMLHttpRequest cannot load https://localhost:9443/oauth2/token. Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'null' is therefore not allowed access."
我如何配置 WSO2 IS 来处理它?或者有替代方案吗?
WSO2 API 管理器 (
我不认为 return 的 CORS headers 的令牌 API。要使其正常工作,您可以通过 API 经理在 IS 的前端令牌 API。默认情况下,您在其中创建的所有 REST APIs 中的 APIM returns CORS headers。
事实上,API 经理发送了一个 API(即 https://localhost:8243/token
),它位于 IS 的令牌 API(即 https://localhost:9443/oauth2/token
)的前面(注意: APIM 中安装了某些 IS 功能)。但它也不 return CORS headers。要使其成为 return CORS headers,您应该遵循您提到的 SO link。
另一个简单的选择是,如果你只需要 CORS headers,你可以简单地通过另一个自定义服务将 IS 的 Token API 前置 returns CORS headers在响应中。
这是在 Identity Server 上未启用跨源资源共享 (CORS) 时的预期行为。事实上,您可以为 Identity Server 启用 CORS。查看 [1] 如何操作。
[1] http://hasanthipurnima.blogspot.com/2016/05/applying-cors-filter-to-wso2-identity.html