Keyrock 的 CORS 问题
CORS issue with Keyrock
我正在尝试将自定义应用程序与 Keyrock Fiware Identity Manager 集成。
流程如下:
- 用户点击登录按钮
- 他被重定向到
/oauth2/authorize/?response_type=code&client_id={clientid}&state=xyz&redirect_uri=http:{ip}:{port}
- 用户插入他的凭据
- 身份验证后,他被重定向到我的应用程序,我尝试按如下方式检索令牌:
var reqData = "grant_type=authorization_code&code=" + code + "&redirect_uri=" + http:{ip}:{port};
var reqHeaders = new Object();
reqHeaders.Access-Control-Allow-Headers= "Content-Type, Access-Control-Allow-Headers,Access-Control-Allow-Origin, Authorization, X-Requested-With, origin, accept",
reqHeaders.Access-Control-Allow-Methods= "POST, GET, OPTIONS, DELETE, PUT",
reqHeaders.Access-Control-Allow-Origin="*"
reqHeaders.Access-Control-Expose-Headers="http://*/*"
reqHeaders.Authorization="Basic {token}"
reqHeaders.Content-Type="application/x-www-form-urlencoded"
reqHeaders.X-Requested-With="XMLHttpRequest"
$.ajax({
url : idmURL + '/oauth2/token',
type : 'POST',
dataType : 'json',
crossDomain : true,
data : reqData,
headers : reqHeaders,
success : function(data) {
console.log(data);
token = data.access_token;
}
});
但是 post 请求从未启动,因为我收到:
XMLHttpRequest cannot load http://{ip}:{port}/oauth2/token. Request header field Access-Control-Allow-Methods is not allowed by Access-Control-Allow-Headers in preflight response.
我尝试将 {ip}:{port} 插入到 Keyrock local_settings.py 文件中的 CORS_WHITELIST 和 ALLOWED_HOST,但没有任何变化。
谁能帮帮我?
具有讽刺意味的是,我认为问题是由于您使用的 CORS headers 用于响应您的请求:
- Access-Control-Allow-Headers
- Access-Control-Allow-Methods
- Access-Control-Allow-Origin
- Access-Control-Expose-Headers
因此预检失败,因为服务器不允许这些,只有响应中提供的 header 的子集 header Access-Control-Allow-Headers.
从请求中删除这些。
更多信息:https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS
我正在尝试将自定义应用程序与 Keyrock Fiware Identity Manager 集成。 流程如下:
- 用户点击登录按钮
- 他被重定向到
/oauth2/authorize/?response_type=code&client_id={clientid}&state=xyz&redirect_uri=http:{ip}:{port}
- 用户插入他的凭据
- 身份验证后,他被重定向到我的应用程序,我尝试按如下方式检索令牌:
var reqData = "grant_type=authorization_code&code=" + code + "&redirect_uri=" + http:{ip}:{port};
var reqHeaders = new Object();
reqHeaders.Access-Control-Allow-Headers= "Content-Type, Access-Control-Allow-Headers,Access-Control-Allow-Origin, Authorization, X-Requested-With, origin, accept",
reqHeaders.Access-Control-Allow-Methods= "POST, GET, OPTIONS, DELETE, PUT",
reqHeaders.Access-Control-Allow-Origin="*"
reqHeaders.Access-Control-Expose-Headers="http://*/*"
reqHeaders.Authorization="Basic {token}"
reqHeaders.Content-Type="application/x-www-form-urlencoded"
reqHeaders.X-Requested-With="XMLHttpRequest"
$.ajax({
url : idmURL + '/oauth2/token',
type : 'POST',
dataType : 'json',
crossDomain : true,
data : reqData,
headers : reqHeaders,
success : function(data) {
console.log(data);
token = data.access_token;
}
});
但是 post 请求从未启动,因为我收到:
XMLHttpRequest cannot load http://{ip}:{port}/oauth2/token. Request header field Access-Control-Allow-Methods is not allowed by Access-Control-Allow-Headers in preflight response.
我尝试将 {ip}:{port} 插入到 Keyrock local_settings.py 文件中的 CORS_WHITELIST 和 ALLOWED_HOST,但没有任何变化。
谁能帮帮我?
具有讽刺意味的是,我认为问题是由于您使用的 CORS headers 用于响应您的请求:
- Access-Control-Allow-Headers
- Access-Control-Allow-Methods
- Access-Control-Allow-Origin
- Access-Control-Expose-Headers
因此预检失败,因为服务器不允许这些,只有响应中提供的 header 的子集 header Access-Control-Allow-Headers.
从请求中删除这些。
更多信息:https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS