Passa al contenuto principale

Autenticazione

Le API di Askme utilizzano il flusso OAuth 2.0 "Client Credentials" per ottenere un access token JWT che dovrà essere usato nelle richieste API autenticate.

Questa pagina descrive la procedura per ottenere il token dal realm Keycloak centrale di Askme.

Keycloak (Token endpoint)

Endpoint token (client credentials, application/x-www-form-urlencoded):

POST https://account.askmesuite.com/realms/askmesuite/protocol/openid-connect/token
Content-Type: application/x-www-form-urlencoded

Parametri (form data)

ParametroValoreDescrizione
grant_typeclient_credentialsTipo di grant da inviare
client_idstringClient ID fornito
client_secretstringClient secret fornito (se previsto)

Esempio: richiesta con cURL

curl -X POST "https://account.askmesuite.com/realms/askmesuite/protocol/openid-connect/token" \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "grant_type=client_credentials" \
-d "client_id=YOUR_CLIENT_ID" \
-d "client_secret=YOUR_CLIENT_SECRET"

Esempio: richiesta con Python (requests)

import requests

token_url = "https://account.askmesuite.com/realms/askmesuite/protocol/openid-connect/token"

payload = {
"grant_type": "client_credentials",
"client_id": "YOUR_CLIENT_ID",
"client_secret": "YOUR_CLIENT_SECRET"
}

resp = requests.post(token_url, data=payload, headers={"Content-Type": "application/x-www-form-urlencoded"})
resp.raise_for_status()
token_data = resp.json()
print(token_data)

Esempio: richiesta con JavaScript (axios)

const axios = require('axios');
const qs = require('qs');

const tokenUrl = 'https://account.askmesuite.com/realms/askmesuite/protocol/openid-connect/token';
const payload = qs.stringify({
grant_type: 'client_credentials',
client_id: 'YOUR_CLIENT_ID',
client_secret: 'YOUR_CLIENT_SECRET'
});

axios.post(tokenUrl, payload, { headers: { 'Content-Type': 'application/x-www-form-urlencoded' } })
.then(res => console.log(res.data))
.catch(err => console.error(err.response ? err.response.data : err.message));

Esempio di risposta (successo)

{
"access_token": "eyJhbGciOiJSUzI1NiIsInR5cC...",
"token_type": "Bearer",
"expires_in": 3600,
"scope": "chat:read chat:write chat:admin",
"issued_at": 1705078000
}

Uso del token nelle API

Dopo aver ottenuto access_token (JWT), è necessario includerlo nelle richieste verso le API protette utilizzando l'header Authorization: Bearer <access_token>, oppure il meccanismo descritto nella pagina specifica del servizio, se diverso.

Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cC...

Validazione e JWKs

Per validare lato server le firme dei JWT, è possibile utilizzare l'endpoint JWKS del realm:

https://account.askmesuite.com/realms/askmesuite/protocol/openid-connect/certs

Errori comuni

  • invalid_client: client_id o client_secret errati
  • unauthorized_client: client non autorizzato per il grant
  • invalid_scope: scope non assegnati al client

Consigli di sicurezza

  • Conservare client_secret in un secret manager o in variabili d'ambiente.
  • Utilizzare HTTPS per tutte le comunicazioni.
  • Richiedere solo gli scope necessari.