Sempre più siti web, community e progetti online preferiscono delegare l’autenticazione a provider esterni anziché gestire direttamente utenti e password.
Per questo motivo SimosNap IRC Network mette a disposizione un sistema di autenticazione basato su OAuth 2.0 e OpenID Connect che consente agli sviluppatori di integrare il login SimosNap nelle proprie applicazioni.
In questo articolo vedremo come funziona l’integrazione e come iniziare rapidamente.
‌       ‌
Perché utilizzare OAuth?
Gestire un sistema di login richiede tempo, manutenzione e attenzione alla sicurezza.
Utilizzando OAuth:
- non devi gestire password degli utenti
- non devi implementare procedure di recupero password
- non devi occuparti della sicurezza delle credenziali
- puoi utilizzare l’identità SimosNap già esistente
L’utente effettua il login direttamente sui sistemi SimosNap e la tua applicazione riceve solamente le informazioni autorizzate.  ‌
Registrare un’applicazione
Per utilizzare il sistema OAuth è necessario registrare un'applicazione all'interno del proprio account SimosNap.
Durante la registrazione vengono generati:
- Client ID
- Client Secret
- Redirect URI autorizzate
- Scope consentiti
Esempio
Client ID: my_application_123456789
Client Secret: xxxxxxxxxxxxxxxxxxxxxxxx
Redirect URI: https://example.org/oauth/callback.php
Endpoint disponibili
Authorization Endpoint
https://www.simosnap.org/rest/service.php/oauth/authorize
Token Endpoint
https://www.simosnap.org/rest/service.php/oauth/token
UserInfo Endpoint
https://www.simosnap.org/rest/service.php/oauth/userinfo
Passo 1: Reindirizzare l’utente
Quando l’utente clicca sul pulsante "Accedi con SimosNap" deve essere reindirizzato all'endpoint di autorizzazione OAuth.
Richiesta di autorizzazione
$clientId = 'my_application_123456789';
$redirectUri = 'https://example.org/oauth/callback.php';
$state = bin2hex(random_bytes(16));
$_SESSION['oauth_state'] = $state;
$params = [
'response_type' => 'code',
'client_id' => $clientId,
'redirect_uri' => $redirectUri,
'scope' => 'openid profile irc',
'state' => $state
];
header(
'Location: https://www.simosnap.org/rest/service.php/oauth/authorize?' .
http_build_query($params)
);
exit;
Passo 2: Ricevere il codice di autorizzazione
Dopo il login e il consenso dell’utente, SimosNap reindirizzerà il browser verso la tua callback.
Esempio di redirect
https://example.org/oauth/callback.php?code=abc123&state=xyz456
Prima di continuare è fondamentale verificare il parametro state per prevenire attacchi CSRF.
Verifica del parametro state
if ($_GET['state'] !== $_SESSION['oauth_state']) {
die('Invalid state');
}
Passo 3: Ottenere un Access Token
Il codice ricevuto deve essere scambiato con un token.
Richiesta del token di accesso
$ch = curl_init();
curl_setopt_array($ch, [
CURLOPT_URL => 'https://www.simosnap.org/rest/service.php/oauth/token',
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POSTFIELDS => http_build_query([
'grant_type' => 'authorization_code',
'client_id' => $clientId,
'client_secret' => $clientSecret,
'redirect_uri' => $redirectUri,
'code' => $_GET['code']
])
]);
$response = curl_exec($ch);
curl_close($ch);
$data = json_decode($response, true);
Risposta tipica
{
"access_token": "xxxxxxxx",
"token_type": "Bearer",
"expires_in": 3600
}
Passo 4: Recuperare i dati dell’utente
Una volta ottenuto il token è possibile interrogare l’endpoint UserInfo.
$ch = curl_init();
curl_setopt_array($ch, [
CURLOPT_URL => 'https://www.simosnap.org/rest/service.php/oauth/userinfo',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
'Authorization: Bearer ' . $data['access_token']
]
]);
$userInfo = curl_exec($ch);
curl_close($ch);
$user = json_decode($userInfo, true);
      ‌
Informazioni disponibili
Attualmente l’endpoint UserInfo può restituire:
{
"sub": "12345",
"nickname": "SimosNap",
"preferred_username": "SimosNap",
"profile_url": "https://www.simosnap.org/user/stats:SimosNap/profile",
"irc_account": "SimosNap",
"is_oper": false
}
Campi principali:
| Campo | Descrizione |
|---|---|
sub |
Identificativo univoco utente |
nickname |
Nickname visualizzato |
preferred_username |
Username preferito |
profile_url |
URL profilo pubblico |
irc_account |
Account IRC associato |
is_oper |
Stato operatore IRC |
Gestione sessione locale
Una volta ottenuti i dati dell’utente è possibile creare una normale sessione applicativa.
Esempio:
$_SESSION['user_id'] = $user['sub'];
$_SESSION['nickname'] = $user['nickname'];
$_SESSION['irc_account'] = $user['irc_account'];
$_SESSION['profile_url'] = $user['profile_url'];
Da questo momento l’utente è autenticato sul tuo sito.‌       ‌
Sicurezza
Per una corretta implementazione ricordati sempre di:
- utilizzare HTTPS
- verificare il parametro
state - conservare il Client Secret in modo sicuro
- validare sempre il redirect URI
- non salvare password SimosNap
- utilizzare sessioni sicure
‌       ‌
Un esempio reale: ChatItaly
ChatItaly utilizza già il sistema OAuth di SimosNap per gestire:
- login utenti
- Feed Community
- votazioni
- commenti
- funzionalità social
L’applicazione non gestisce password e non mantiene un database utenti separato.
L’identità rimane centralizzata su SimosNap, mentre il sito può concentrarsi esclusivamente sulle proprie funzionalità .
‌       ‌
Vuoi integrare il tuo sito?
Se gestisci una community, un forum, un progetto open source o un servizio collegato al mondo IRC, puoi richiedere l’attivazione di un client OAuth e iniziare ad utilizzare il login SimosNap nella tua applicazione.
L’obiettivo è costruire un ecosistema di servizi interoperabili che condividano la stessa identità digitale, mantenendo il pieno controllo da parte degli utenti.
Buon coding!
Documentazione: https://www.simosnap.org/resources#oauth