来自rest api的keycloak登录已被CORS阻止
Posted
技术标签:
【中文标题】来自rest api的keycloak登录已被CORS阻止【英文标题】:keycloak login from rest api has been blocked by CORS 【发布时间】:2020-07-08 03:29:54 【问题描述】:我正在尝试使用 localhost (localhost:3000) 中现有登录页面的 keycloak 登录。 Keycloak 在另一台主机上运行 (http://kchost:38080)。我知道这不是推荐的登录方式,但我需要立即调整现有系统。
尝试使用 curl:
curl --location --request POST 'http://kchost:38080/auth/realms/myrealm/protocol/openid-connect/token' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--data-urlencode 'client_id=publictestclient' \
--data-urlencode 'username=myuser' \
--data-urlencode 'password=mypass' \
--data-urlencode 'grant_type=password'
我成功获得了预期的响应(使用 access_token 和 refresh_token)。我不能在浏览器上做同样的事情。该错误与 CORS 有关。
我正在使用 axios,代码如下:
axios.defaults.httpsAgent = new https.Agent( rejectUnauthorized: false )
axios.defaults.crossDomain = true;
await axios(
method: "POST",
url: 'http://kchost:38080/auth/realms/myrealm/protocol/openid-connect/token',
headers:
"Content-Type": "application/x-www-form-urlencoded;charset=UTF-8",
'Access-Control-Allow-Origin': '*'
,
data:
client_id: 'publictestclient',
username: 'myuser',
password: 'mypass',
grant_type: 'password',
)
错误是:从源“http://localhost:3000”访问 XMLHttpRequest 在“http://kchost:38080/auth/realms/myrealm/protocol/openid-connect/token”已被 CORS 策略阻止:访问控制不允许请求标头字段 access-control-allow-origin - 预检响应中的允许标头。
如果我省略标头 'Access-Control-Allow-Origin': '*',则错误变为:Access to XMLHttpRequest at 'http://kchost:38080/auth/realms/myrealm/protocol/openid-connect/token' from origin '@987654325 @' 已被 CORS 策略阻止:请求的资源上不存在“Access-Control-Allow-Origin”标头。
在 Keycloak 管理端,客户端具有访问类型“public”以避免“clientSecret”要求。 Direct Access Grants Enabled 已启用。尝试了 'web origins' 和 'valid redirect url' 的不同配置,目前的配置是:
valid redirect url: localhost*
web origins: *
我很确定这是与服务器配置有关的问题。我该如何解决?
【问题讨论】:
您找到解决方案了吗?我也有同样的问题 有什么解决办法吗?我有同样的问题。 【参考方案1】:有效的重定向 url 前面应该有 http 或 https。 所以对 localhost 有效的可能是: https://localhost/* 如果你想让它安全的话,网络来源应该是 https://localhost 之类的。
【讨论】:
以上是关于来自rest api的keycloak登录已被CORS阻止的主要内容,如果未能解决你的问题,请参考以下文章
使用java绕过带有rest api的keycloak登录系统并生成领域/应用程序URL
如何从 REST API(PUT 方法)更新 Keycloak 密码?