在 React 和 Web Origins 集中使用 Keycloak 的 CORS 问题
CORS issue with Keycloak using it in React and Web Origins set
Keycloak 运行 localhost:8080 (领域 - 演示,客户端 - 演示)
React 应用程序 运行 localhost:3000
想要从 Keycloak 获取数据到 React 中,为此我首先需要获得一个访问令牌。此处使用的配置适用于 Postman。
useEffect(() => {
const fetchKeycloakUser = async () => {
setIsKeycloakUserError(false)
try {
const URL =
'http://localhost:8080/auth/realms/demo/protocol/openid-connect/token'
const result = await axios({
method: 'POST',
url: URL,
data: {
username: 'admin',
password: 'admin',
client_id: 'admin-cli',
grant_type: 'password',
},
headers: {
'Content-Type': 'application/x-www-form-urlencoded',
},
withCredentials: false, //even 'true' doesn't work
})
console.log(result)
} catch (error) {
console.log(error)
setIsKeycloakUserError(true)
}
}
fetchKeycloakUser()
}, [])
客户端 'demo' 的网络起源是这样的 (我也试过“*”和“+”):
这是我遇到的错误:
P.S。 - 这不是使用 Keycloak inside React。它们都是独立的应用程序,我只是想将 Keycloak 数据提取到我的 React 应用程序中。
您可以尝试在“主”领域中的“security-admin-console”客户端的“Web 来源”中使用 +。
我通过 nginx 代理使它工作。对于任何需要帮助的人,这就是我 nginx.conf:
中的内容
...
http{
...
# this is where my React app runs, you can name it whatever you like
upstream mde{
server localhost:3000;
}
# this is the standard port where keycloak runs
upstream kc{
server localhost:8080;
}
server{
listen 80;
server_name localhost;
location /mde {
proxy_pass http://mde;
}
location /auth {
proxy_pass http://kc;
}
}
}
...
而不是 localhost:3000,现在您可以在 localhost/mde 访问您的 React 应用程序,并且不会遇到任何 CORS 错误。
Keycloak 运行 localhost:8080 (领域 - 演示,客户端 - 演示)
React 应用程序 运行 localhost:3000
想要从 Keycloak 获取数据到 React 中,为此我首先需要获得一个访问令牌。此处使用的配置适用于 Postman。
useEffect(() => {
const fetchKeycloakUser = async () => {
setIsKeycloakUserError(false)
try {
const URL =
'http://localhost:8080/auth/realms/demo/protocol/openid-connect/token'
const result = await axios({
method: 'POST',
url: URL,
data: {
username: 'admin',
password: 'admin',
client_id: 'admin-cli',
grant_type: 'password',
},
headers: {
'Content-Type': 'application/x-www-form-urlencoded',
},
withCredentials: false, //even 'true' doesn't work
})
console.log(result)
} catch (error) {
console.log(error)
setIsKeycloakUserError(true)
}
}
fetchKeycloakUser()
}, [])
客户端 'demo' 的网络起源是这样的 (我也试过“*”和“+”):
这是我遇到的错误:
P.S。 - 这不是使用 Keycloak inside React。它们都是独立的应用程序,我只是想将 Keycloak 数据提取到我的 React 应用程序中。
您可以尝试在“主”领域中的“security-admin-console”客户端的“Web 来源”中使用 +。
我通过 nginx 代理使它工作。对于任何需要帮助的人,这就是我 nginx.conf:
中的内容...
http{
...
# this is where my React app runs, you can name it whatever you like
upstream mde{
server localhost:3000;
}
# this is the standard port where keycloak runs
upstream kc{
server localhost:8080;
}
server{
listen 80;
server_name localhost;
location /mde {
proxy_pass http://mde;
}
location /auth {
proxy_pass http://kc;
}
}
}
...
而不是 localhost:3000,现在您可以在 localhost/mde 访问您的 React 应用程序,并且不会遇到任何 CORS 错误。