来自 dockerized NuxtJS 应用程序的 Keycloak LDAP 身份验证
Keycloak LDAP authentication from a dockerized NuxtJS app
我在使用 Keycloak 进行身份验证时遇到问题。当我的 Nuxt 应用程序在本地 运行ning (npm 运行 dev) 时一切正常,但是当它在 Docker 容器中时,出现问题。
- Windows10
- Docker 20.10.11
- Docker-撰写 1.29.2
- nuxt: ^2.15.7
- @nuxtjs/auth-next:^5.0.0-1637745161.ea53f98
- @nuxtjs/axios:^5.13.6
我有一个包含 Keycloak 和 Ldap 的 docker 服务:keycloak:8180 和 myad:10389。我的 Nuxt 应用程序 运行ning 在端口 3000 上。
在前端,这是我的配置,当我使用“npm 运行 dev”在本地启动我的应用程序时,它运行良好:
server: {
port: 3000,
host: '0.0.0.0'
},
...
auth: {
strategies: {
local: false,
keycloak: {
scheme: 'oauth2',
endpoints: {
authorization: 'http://localhost:8180/auth/realms/<realm>/protocol/openid-connect/auth',
token: 'http://localhost:8180/auth/realms/<realm>/protocol/openid-connect/token',
userInfo: 'http://localhost:8180/auth/realms/<realm>/protocol/openid-connect/userinfo',
logout: 'http://localhost:8180/auth/realms/<realm>/protocol/openid-connect/logout?redirect_uri=' + encodeURIComponent('http://localhost:3000')
},
token: {
property: 'access_token',
type: 'Bearer',
name: 'Authorization',
maxAge: 300
},
refreshToken: {
property: 'refresh_token',
maxAge: 60 * 60 * 24 * 30
},
responseType: 'code',
grantType: 'authorization_code',
clientId: '<client_id>',
scope: ['openid'],
codeChallengeMethod: 'S256'
}
},
redirect: {
login: '/',
logout: '/',
home: '/home'
}
},
router: {
middleware: ['auth']
}
}
这是我的 Keycloak 和 Nuxt docker-compose 配置:
keycloak:
image: quay.io/keycloak/keycloak:latest
container_name: keycloak
hostname: keycloak
environment:
- DB_VENDOR=***
- DB_ADDR=***
- DB_DATABASE=***
- DB_USER=***
- DB_SCHEMA=***
- DB_PASSWORD=***
- KEYCLOAK_USER=***
- KEYCLOAK_PASSWORD=***
- PROXY_ADDRESS_FORWARDING=true
ports:
- "8180:8080"
networks:
- ext_sd_bridge
networks:
ext_sd_bridge:
external:
name: sd_bridge
client_ui:
image: ***
container_name: client_ui
hostname: client_ui
ports:
- "3000:3000"
networks:
- sd_bridge
networks:
sd_bridge:
name: sd_bridge
当我的 Nuxt 应用程序在其容器内时,身份验证似乎有效,但重定向行为很奇怪。如您所见,我总是在重定向到“/home”后被重定向到我的登录页面(“/”):
Browser network
我是不是遗漏了什么或者我做错了什么?
我知道我的问题是什么了。
所以基本上,我的 nuxt.config.js 在 Docker 容器内使用是错误的。我不得不将身份验证端点更改为:
endpoints: {
authorization: '/auth/realms/MEDDATABOX/protocol/openid-connect/auth',
token: '/auth/realms/MEDDATABOX/protocol/openid-connect/token',
userInfo: '/auth/realms/MEDDATABOX/protocol/openid-connect/userinfo',
logout: '/auth/realms/MEDDATABOX/protocol/openid-connect/logout?redirect_uri=' + encodeURIComponent('http://localhost:3000')
}
并将“/auth”请求代理到我的 Keycloak Docker 容器的主机名(请注意,我的 Keycloak 和 Nuxt 容器在我的 docker-compose 文件中位于同一网络中):
proxy: {
'/auth': 'http://keycloak:8180'
}
此时,除“/authenticate”请求外,每个请求都工作正常,因为“keycloak:8180/authenticate”已放入浏览器URL,当然,它不知道“钥匙斗篷”。
为此,我将此环境变量添加到我的 Keycloak docker-compose :
KEYCLOAK_FRONTEND_URL=http://localhost:8180/auth
有了这个变量,authentication/redirection 的整个过程就像一个魅力一样工作,在他们的容器中有 Keycloak 和 Nuxt :)
我在使用 Keycloak 进行身份验证时遇到问题。当我的 Nuxt 应用程序在本地 运行ning (npm 运行 dev) 时一切正常,但是当它在 Docker 容器中时,出现问题。
- Windows10
- Docker 20.10.11
- Docker-撰写 1.29.2
- nuxt: ^2.15.7
- @nuxtjs/auth-next:^5.0.0-1637745161.ea53f98
- @nuxtjs/axios:^5.13.6
我有一个包含 Keycloak 和 Ldap 的 docker 服务:keycloak:8180 和 myad:10389。我的 Nuxt 应用程序 运行ning 在端口 3000 上。
在前端,这是我的配置,当我使用“npm 运行 dev”在本地启动我的应用程序时,它运行良好:
server: {
port: 3000,
host: '0.0.0.0'
},
...
auth: {
strategies: {
local: false,
keycloak: {
scheme: 'oauth2',
endpoints: {
authorization: 'http://localhost:8180/auth/realms/<realm>/protocol/openid-connect/auth',
token: 'http://localhost:8180/auth/realms/<realm>/protocol/openid-connect/token',
userInfo: 'http://localhost:8180/auth/realms/<realm>/protocol/openid-connect/userinfo',
logout: 'http://localhost:8180/auth/realms/<realm>/protocol/openid-connect/logout?redirect_uri=' + encodeURIComponent('http://localhost:3000')
},
token: {
property: 'access_token',
type: 'Bearer',
name: 'Authorization',
maxAge: 300
},
refreshToken: {
property: 'refresh_token',
maxAge: 60 * 60 * 24 * 30
},
responseType: 'code',
grantType: 'authorization_code',
clientId: '<client_id>',
scope: ['openid'],
codeChallengeMethod: 'S256'
}
},
redirect: {
login: '/',
logout: '/',
home: '/home'
}
},
router: {
middleware: ['auth']
}
}
这是我的 Keycloak 和 Nuxt docker-compose 配置:
keycloak:
image: quay.io/keycloak/keycloak:latest
container_name: keycloak
hostname: keycloak
environment:
- DB_VENDOR=***
- DB_ADDR=***
- DB_DATABASE=***
- DB_USER=***
- DB_SCHEMA=***
- DB_PASSWORD=***
- KEYCLOAK_USER=***
- KEYCLOAK_PASSWORD=***
- PROXY_ADDRESS_FORWARDING=true
ports:
- "8180:8080"
networks:
- ext_sd_bridge
networks:
ext_sd_bridge:
external:
name: sd_bridge
client_ui:
image: ***
container_name: client_ui
hostname: client_ui
ports:
- "3000:3000"
networks:
- sd_bridge
networks:
sd_bridge:
name: sd_bridge
当我的 Nuxt 应用程序在其容器内时,身份验证似乎有效,但重定向行为很奇怪。如您所见,我总是在重定向到“/home”后被重定向到我的登录页面(“/”):
Browser network
我是不是遗漏了什么或者我做错了什么?
我知道我的问题是什么了。
所以基本上,我的 nuxt.config.js 在 Docker 容器内使用是错误的。我不得不将身份验证端点更改为:
endpoints: {
authorization: '/auth/realms/MEDDATABOX/protocol/openid-connect/auth',
token: '/auth/realms/MEDDATABOX/protocol/openid-connect/token',
userInfo: '/auth/realms/MEDDATABOX/protocol/openid-connect/userinfo',
logout: '/auth/realms/MEDDATABOX/protocol/openid-connect/logout?redirect_uri=' + encodeURIComponent('http://localhost:3000')
}
并将“/auth”请求代理到我的 Keycloak Docker 容器的主机名(请注意,我的 Keycloak 和 Nuxt 容器在我的 docker-compose 文件中位于同一网络中):
proxy: {
'/auth': 'http://keycloak:8180'
}
此时,除“/authenticate”请求外,每个请求都工作正常,因为“keycloak:8180/authenticate”已放入浏览器URL,当然,它不知道“钥匙斗篷”。 为此,我将此环境变量添加到我的 Keycloak docker-compose :
KEYCLOAK_FRONTEND_URL=http://localhost:8180/auth
有了这个变量,authentication/redirection 的整个过程就像一个魅力一样工作,在他们的容器中有 Keycloak 和 Nuxt :)