Add internal Authentik URL for server-to-server communication
All checks were successful
build-and-deploy / build (push) Successful in 7s
build-and-deploy / deploy (push) Successful in 3s

This fixes ETIMEDOUT errors when exchanging OAuth tokens. The container
now uses the Docker internal service name (authentiknucleo-server-1:9000)
for server-to-server API calls while keeping the public URL for browser
redirects.

Changes:
- Add NUXT_OAUTH_AUTHENTIK_SERVER_URL_INTERNAL env var
- Use internal URL for token exchange and userinfo endpoints
- Update docker-compose.yml and Gitea workflow
This commit is contained in:
2025-10-11 18:47:41 -06:00
parent c681c8579d
commit db4a79e617
4 changed files with 9 additions and 4 deletions

View File

@@ -37,6 +37,7 @@ jobs:
NUXT_OAUTH_AUTHENTIK_CLIENT_ID: ${{ secrets.NUXT_OAUTH_AUTHENTIK_CLIENT_ID }}
NUXT_OAUTH_AUTHENTIK_CLIENT_SECRET: ${{ secrets.NUXT_OAUTH_AUTHENTIK_CLIENT_SECRET }}
NUXT_OAUTH_AUTHENTIK_SERVER_URL: ${{ vars.NUXT_OAUTH_AUTHENTIK_SERVER_URL }}
NUXT_OAUTH_AUTHENTIK_SERVER_URL_INTERNAL: ${{ vars.NUXT_OAUTH_AUTHENTIK_SERVER_URL_INTERNAL }}
NUXT_OAUTH_AUTHENTIK_REDIRECT_URL: ${{ vars.NUXT_OAUTH_AUTHENTIK_REDIRECT_URL }}
NUXT_PUBLIC_APP_URL: ${{ vars.NUXT_PUBLIC_APP_URL }}
NUXT_SESSION_PASSWORD: ${{ secrets.NUXT_SESSION_PASSWORD }}

View File

@@ -10,6 +10,7 @@ services:
- NUXT_OAUTH_AUTHENTIK_CLIENT_ID=${NUXT_OAUTH_AUTHENTIK_CLIENT_ID}
- NUXT_OAUTH_AUTHENTIK_CLIENT_SECRET=${NUXT_OAUTH_AUTHENTIK_CLIENT_SECRET}
- NUXT_OAUTH_AUTHENTIK_SERVER_URL=${NUXT_OAUTH_AUTHENTIK_SERVER_URL}
- NUXT_OAUTH_AUTHENTIK_SERVER_URL_INTERNAL=${NUXT_OAUTH_AUTHENTIK_SERVER_URL_INTERNAL}
- NUXT_OAUTH_AUTHENTIK_REDIRECT_URL=${NUXT_OAUTH_AUTHENTIK_REDIRECT_URL}
# Public URL
- NUXT_PUBLIC_APP_URL=${NUXT_PUBLIC_APP_URL}

View File

@@ -17,6 +17,7 @@ export default defineNuxtConfig({
clientId: process.env.NUXT_OAUTH_AUTHENTIK_CLIENT_ID || '',
clientSecret: process.env.NUXT_OAUTH_AUTHENTIK_CLIENT_SECRET || '',
serverUrl: process.env.NUXT_OAUTH_AUTHENTIK_SERVER_URL || '',
serverUrlInternal: process.env.NUXT_OAUTH_AUTHENTIK_SERVER_URL_INTERNAL || '',
redirectURL: process.env.NUXT_OAUTH_AUTHENTIK_REDIRECT_URL || ''
}
},

View File

@@ -16,12 +16,14 @@ export default defineEventHandler(async (event) => {
clientId: runtimeConfig.oauth.authentik.clientId,
clientSecret: runtimeConfig.oauth.authentik.clientSecret,
serverUrl: runtimeConfig.oauth.authentik.serverUrl,
serverUrlInternal: runtimeConfig.oauth.authentik.serverUrlInternal || runtimeConfig.oauth.authentik.serverUrl,
redirectURL: runtimeConfig.oauth.authentik.redirectURL,
scope: ['openid', 'profile', 'email'],
}
console.log('OAuth Authentik - Iniciando flujo:', {
serverUrl: config.serverUrl,
serverUrlInternal: config.serverUrlInternal,
redirectURL: config.redirectURL,
hasCode: !!query.code
})
@@ -29,8 +31,8 @@ export default defineEventHandler(async (event) => {
// Handle OAuth callback
if (query.code) {
try {
// Exchange code for tokens
const tokenUrl = `${config.serverUrl}/application/o/token/`
// Exchange code for tokens (usar URL interna para comunicación servidor-a-servidor)
const tokenUrl = `${config.serverUrlInternal}/application/o/token/`
const tokenResponse = await $fetch(tokenUrl, {
method: 'POST',
headers: {
@@ -47,8 +49,8 @@ export default defineEventHandler(async (event) => {
const tokens = tokenResponse as any
// Get user info
const userInfoUrl = `${config.serverUrl}/application/o/userinfo/`
// Get user info (usar URL interna para comunicación servidor-a-servidor)
const userInfoUrl = `${config.serverUrlInternal}/application/o/userinfo/`
const user = await $fetch(userInfoUrl, {
headers: {
Authorization: `Bearer ${tokens.access_token}`,