我在使用 Keycloak 進行身份驗證時遇到問題。當我的 Nuxt 應用程式在本地運行時一切正常(npm run dev),但是當它在 Docker 容器中時,出現了問題。
- 視窗 10
- 碼頭工人 20.10.11
- Docker-compose 1.29.2
- 努克斯:^2.15.7
- @nuxtjs/auth-next:^5.0.0-1637745161.ea53f98
- @nuxtjs/axios:^5.13.6
我有一個包含 Keycloak 和 Ldap 的 docker 服務:keycloak:8180 和 myad:10389。我的 Nuxt 應用程式在埠 3000 上運行。
在前端,這是我的配置,當我使用“npm run 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”后,我總是被重定向到我的登錄頁面(“/”):
瀏覽器網路
我錯過了什么還是我做錯了什么?非常感謝你的幫助。
馬特
uj5u.com熱心網友回復:
我弄清楚我的問題是什么。
所以基本上,我的 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”。為此,我將此環境變數添加到我的 Keycloak docker-compose 中:
KEYCLOAK_FRONTEND_URL=http://localhost:8180/auth
使用這個變數,身份驗證/重定向的整個程序就像一個魅力,在他們的容器中使用 Keycloak 和 Nuxt :)
??
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/424376.html
下一篇:如何在HTML中使用字體真棒圖示
