feat: Add Bearer Token Support to key-auth Plugin
I maintainer di solito rispondono entro 2 giorni
Nessuno ha ancora preso questa issue.
- #12909 di @r-it-ae — chiusa senza merge
Valutazione
- Difficoltà
- 3/5
- Tempo stimato
- 1-2 giorni
- Idoneità per principianti
- 45/100
- Tipo di issue
- Funzionalità
- Chiarezza
- Abbastanza chiara
- Stato di attività
- Ferma
- Stack tecnologico
- lua
- Ambito
- api, authentication
Direzione di ricerca
Inizia individuando l’implementazione del plugin key-auth, il relativo schema e i test di autenticazione esistenti. Traccia il modo in cui vengono gestiti l’header configurato e la risposta WWW-Authenticate, quindi aggiungi la copertura per bearer_token abilitato e disabilitato, includendo valori Authorization validi e non validi. Il lavoro è completo quando sono verificati l’estrazione del token richiesta, l’errore di formato rigoroso, lo schema della risposta e la compatibilità con le versioni precedenti.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
Description
Description
The key-auth plugin currently only supports custom header names (default: apikey) for API key authentication. However, it does not support the standard OAuth 2.0 Bearer token format (Authorization: Bearer <token>), which is widely used in modern APIs and is the standard way to pass authentication tokens.
Current Behavior
Currently, when using the key-auth plugin:
- The API key can be passed via a custom header (default:
apikey) or query parameter - The
headerparameter allows customization of the header name - Example:
apikey: my-secret-keyorX-API-KEY: my-secret-key
Expected Behavior
The plugin should support the standard Bearer token format:
- Accept tokens in the format:
Authorization: Bearer <token> - When enabled, the plugin should:
- Force the use of the
Authorizationheader (ignoring theheaderparameter) - Extract the token after the "Bearer " prefix
- Validate the token format strictly
- Update the
WWW-Authenticateresponse header to use "Bearer" scheme instead of "apikey"
- Force the use of the
Use Case
Many APIs and OAuth 2.0-based authentication systems use the Bearer token format as a standard. Supporting this format in the key-auth plugin would:
- Standards Compliance: Follow RFC 6750 (Bearer Token Usage) and OAuth 2.0 specifications
- Interoperability: Allow APISIX to work seamlessly with existing OAuth 2.0 clients and tools
- Migration: Enable easier migration from other API gateways that support Bearer tokens
- Developer Experience: Provide familiar authentication patterns that developers expect
Proposed Solution
Add a new boolean parameter bearer_token to the plugin schema:
{
"plugins": {
"key-auth": {
"bearer_token": true
}
}
}
When bearer_token is set to true:
- The plugin should read from the
Authorizationheader only - Extract the token after "Bearer " prefix
- Return
401with error message "Invalid Bearer token format" if the prefix is missing - Set
WWW-Authenticate: Bearer realm="key"in error responses
Example Configuration
# Create a consumer
curl "http://127.0.0.1:9180/apisix/admin/consumers" -X PUT \
-H "X-API-KEY: ${admin_key}" \
-d '{
"username": "jack",
"plugins": {
"key-auth": {
"key": "my-secret-token"
}
}
}'
# Create a route with bearer_token enabled
curl "http://127.0.0.1:9180/apisix/admin/routes/1" -X PUT \
-H "X-API-KEY: ${admin_key}" \
-d '{
"uri": "/protected",
"plugins": {
"key-auth": {
"bearer_token": true
}
},
"upstream": {
"type": "roundrobin",
"nodes": {
"httpbin.org:80": 1
}
}
}'
# Valid request
curl "http://127.0.0.1:9080/protected" \
-H "Authorization: Bearer my-secret-token"
# Returns: 200 OK
# Invalid request (missing Bearer prefix)
curl "http://127.0.0.1:9080/protected" \
-H "Authorization: my-secret-token"
# Returns: 401 Unauthorized
# Response: {"message":"Invalid Bearer token format"}
Benefits
- Backward compatible (default:
false) - No breaking changes to existing configurations
- Follows OAuth 2.0 and RFC 6750 standards
- Simple to implement and use
- Improves security by enforcing standard token format
Alternative Considered
Using the existing header parameter set to "Authorization" doesn't work because:
- It doesn't validate the "Bearer " prefix
- The
WWW-Authenticateresponse header still uses "apikey" scheme - Tokens without "Bearer " prefix would be accepted, which is non-standard
Environment
- APISIX Version: [version]
- Operating System: [OS]
- Deployment: [Docker/Bare Metal/Kubernetes]
- Lingua principale
- Lua
- Stelle
- 17.3k
- Fork
- 3k
- Merge medio
- 4g 16h
- PR unite (30g)
- 69
Preparare l'ambiente
Avvia il container di sviluppo del progetto nel browser, con il tuo account GitHub.
- Nessun Dockerfile né file Docker Compose
- Ha un modello di pull request
- Leggi la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di apache/apisix
-
bug: an admin key injected with ${{VAR}} that contains only digits becomes a number, so the correct key gets 401Forse già presa Una pull request collegata a questa issue è aperta o già unita. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
I maintainer di solito rispondono entro 2 giorni
-
bug(body-transformer): runtime crash when request or response body is a JSON primitiveForse già presa @bhuvan-somisetty l’ha presa 5 giorni fa. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
I maintainer di solito rispondono entro 2 giorni
-
bug: openapi-to-mcp appends a second ? to a query-suffixed path templateForse già presa @lordcheng10 l’ha presa 5 giorni fa. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 83/100
I maintainer di solito rispondono entro 2 giorni
-
ai-proxy forwards client `Transfer-Encoding: chunked` but sends an unchunked body (upstream 400)Forse già presa @locker95 l’ha presa 3 giorni fa. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 82/100
I maintainer di solito rispondono entro 2 giorni
-
As a user, I want the opa plugin to propagate trace context (traceparent) to OPA, so that OPA spans are linked to the APISIX request traceForse già presa @GitNimay l’ha presa 20 giorni fa. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
apache/apisix#14051 · 3 commenti ·
I maintainer di solito rispondono entro 2 giorni
Tutte le issue di apache/apisix
Issue simili
-
bug discord guide:04-dustwallow-marsh locale:enUS lua-error triage v0.3.6
Difficoltà 2/5 1-3 ore Idoneità per principianti 64/100
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 70/100
NaixGames/Polycosmos#79 ·
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 65/100
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 79/100
google/executor.nvim#46 ·
-
Hide undiscovered areaApertaforever from-game
Difficoltà 2/5 1-3 ore Idoneità per principianti 62/100
openmap-world/openmap#96 ·
I maintainer di solito rispondono entro 1 giorno