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
Ad esempio:
Client ID: my_application_123456789 Client Secret: xxxxxxxxxxxxxxxxxxxxxxxx Redirect URI: https://example.org/oauth/callback.php text
-
Endpoint disponibili
Authorization Endpoint
https://www.simosnap.org/rest/service.php/oauth/authorize text
-
Token Endpoint
https://www.simosnap.org/rest/service.php/oauth/token text
-
UserInfo Endpoint
https://www.simosnap.org/rest/service.php/oauth/userinfo text
-
Passo 1: Reindirizzare l’utente
Quando l’utente clicca sul pulsante “Accedi con SimosNap” deve essere inviato all’endpoint di autorizzazione.
Esempio PHP:
<?php $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; php
-
Passo 2: Ricevere il codice di autorizzazione
Dopo il login e il consenso dell’utente, SimosNap reindirizzerà il browser verso la tua callback.
Esempio:
https://example.org/oauth/callback.php?code=abc123&state=xyz456 text
-
Prima di continuare verifica sempre il parametro state.
<?php if ($_GET['state'] !== $_SESSION['oauth_state']) { die('Invalid state'); } php
-
Passo 3: Ottenere un Access Token
Il codice ricevuto deve essere scambiato con un token.
<?php $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); php
-
Risposta tipica:
{ "access_token": "xxxxxxxx", "token_type": "Bearer", "expires_in": 3600 } json
-
Passo 4: Recuperare i dati dell’utente
Una volta ottenuto il token è possibile interrogare l’endpoint UserInfo.
<?php $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); php
-
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 } json
-
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:
<?php $_SESSION['user_id'] = $user['sub']; $_SESSION['nickname'] = $user['nickname']; $_SESSION['irc_account'] = $user['irc_account']; $_SESSION['profile_url'] = $user['profile_url']; php
-
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!