SimosNap IRC Network

Accedi con SimosNap

Integra il login SimosNap nel tuo sito o nella tua applicazione usando OAuth 2.0 e OpenID Connect. Gli utenti possono autenticarsi con il proprio account IRC senza creare nuove password e senza condividere credenziali con servizi esterni.

Perché usare Accedi con SimosNap

OAuth permette di collegare siti, community e strumenti esterni all’identità SimosNap senza dover gestire direttamente registrazioni, password e recupero credenziali.

Login unico

Un account, più servizi

Gli utenti possono accedere ai siti compatibili usando il loro account SimosNap. La tua applicazione riceve solo i dati autorizzati dall’utente.

Identità IRC

Account, nickname e alias

Oltre al profilo pubblico, puoi leggere informazioni IRC utili come account registrato, nickname, avatar e alias collegati a NickServ.

UID stabile

Identificativo numerico affidabile

La risposta userinfo include un uid numerico stabile che puoi usare per collegare commenti, preferiti, reputazione, ban o altre funzioni social senza dipendere dal nickname.

Sicurezza

Nessuna password condivisa

La password resta sempre su SimosNap. La tua applicazione riceve token temporanei e può accedere solo agli scope autorizzati.

Come funziona il flusso OAuth

Il flusso consigliato è Authorization Code Flow: l’utente viene mandato su SimosNap, autorizza l’applicazione e torna al tuo sito con un code temporaneo da scambiare lato server.

1
La tua applicazione crea il link di login Generi una URL verso /oauth/authorize con client_id, redirect_uri, scope e state.
2
L’utente accede su SimosNap Se non è già autenticato, SimosNap mostra il login e poi riprende automaticamente la richiesta OAuth originale.
3
L’utente autorizza l’applicazione SimosNap mostra nome applicazione e permessi richiesti. Se l’utente accetta, viene creato un authorization code.
4
La tua applicazione scambia il code Il code viene inviato a /oauth/token insieme al client secret. Questa chiamata deve avvenire lato server.
5
Leggi il profilo autorizzato Con l’access token puoi chiamare /oauth/userinfo e ricevere le informazioni consentite dagli scope.
Il parametro state è importante: generane uno casuale, salvalo in sessione e verificalo nella callback per proteggere il login da richieste non previste.

Registrare un’applicazione

Prima di usare OAuth devi creare un’applicazione dal pannello account SimosNap. Ogni applicazione ha un Client ID pubblico e un Client Secret privato.

Pannello account

Dati necessari

Indica un nome riconoscibile, il sito web dell’applicazione, la Redirect URI e i permessi che l’applicazione potrà richiedere agli utenti.

Nome applicazione: ChatItaly
Sito web: https://example.com
Redirect URI: https://example.com/oauth/callback.php
Scope disponibili: openid profile irc
client_id client_secret redirect_uri scope
Il Client Secret viene mostrato solo al momento della creazione o della rigenerazione. Copialo subito e non inserirlo mai in codice JavaScript pubblico.

Esempio pratico di login

Un’integrazione reale parte da un pulsante di login che manda l’utente su SimosNap con i parametri OAuth corretti.

GET

URL di autorizzazione

Questa è la URL verso cui reindirizzare l’utente quando preme il pulsante Accedi con SimosNap.

https://www.simosnap.org/rest/service.php/oauth/authorize
https://www.simosnap.org/rest/service.php/oauth/authorize?response_type=code&client_id=CLIENT_ID&redirect_uri=https%3A%2F%2Fexample.com%2Foauth%2Fcallback.php&scope=openid%20profile%20irc&state=RANDOM_STATE
HTML

Pulsante di esempio

Il pulsante può essere semplice: l’importante è costruire la URL lato server e usare uno state casuale per ogni tentativo di login.

<a href="https://www.simosnap.org/rest/service.php/oauth/authorize?response_type=code&client_id=CLIENT_ID&redirect_uri=https%3A%2F%2Fexample.com%2Foauth%2Fcallback.php&scope=openid%20profile%20irc&state=RANDOM_STATE">
    Accedi con SimosNap
</a>

Endpoint OAuth

Questi sono gli endpoint principali usati dal flusso OAuth. Gli endpoint token e userinfo restituiscono dati JSON.

GET

Autorizzazione utente

Avvia il login OAuth e mostra il consenso all’utente.

https://www.simosnap.org/rest/service.php/oauth/authorize
response_type=code client_id redirect_uri scope state
POST

Token endpoint

Scambia l’authorization code con un access token. Questa chiamata deve essere fatta lato server, mai dal browser dell’utente.

https://www.simosnap.org/rest/service.php/oauth/token
grant_type=authorization_code
client_id=CLIENT_ID
client_secret=CLIENT_SECRET
code=AUTHORIZATION_CODE
redirect_uri=https://example.com/oauth/callback.php
{
  "access_token": "ACCESS_TOKEN",
  "token_type": "Bearer",
  "expires_in": 3600,
  "refresh_token": "REFRESH_TOKEN"
}
GET

UserInfo endpoint

Restituisce le informazioni utente autorizzate dagli scope richiesti.

https://www.simosnap.org/rest/service.php/oauth/userinfo
Authorization: Bearer ACCESS_TOKEN
{
  "sub": "hash-stabile-openid",
  "uid": 12345,
  "nickname": "Simos",
  "preferred_username": "Simos",
  "profile_url": "https://www.simosnap.org/user/stats:Simos/profile#info",
  "avatar": "avatar.png",
  "avatar_url": "https://www.simosnap.org/uploads/avatars/default/avatar.png",
  "aliases": ["Simos", "H7-25", "sixxs", "simos|out"],
  "irc_account": "Simos",
  "is_oper": true
}

Scope disponibili

Gli scope definiscono quali informazioni l’applicazione può leggere. L’utente vede i permessi richiesti prima di autorizzare.

openid

Identità OpenID

Abilita l’identificazione dell’utente tramite un subject stabile compatibile con OpenID Connect.

profile

Profilo pubblico

Permette di leggere nickname, profilo pubblico, avatar e alias collegati all’account SimosNap.

irc

Informazioni IRC

Permette di leggere il nome account IRC e alcune informazioni legate all’identità IRC, come lo stato operatore quando disponibile.

email

Indirizzo email

Permette di leggere l’indirizzo email solo se l’applicazione è autorizzata a richiederlo e l’utente concede il consenso.

Esempio PHP completo

Questo esempio mostra una callback minimale: verifica il code, scambia il token e legge userinfo. In produzione aggiungi gestione errori, verifica dello state e salvataggio sicuro della sessione.

PHP

Callback OAuth

Il Client Secret deve restare lato server. Non inserirlo mai in JavaScript o in pagine pubbliche.

<?php

session_start();

$clientId = 'CLIENT_ID';
$clientSecret = 'CLIENT_SECRET';
$redirectUri = 'https://example.com/oauth/callback.php';

if (!isset($_GET['code'])) {
    exit('Authorization code mancante');
}

if (!isset($_GET['state']) || $_GET['state'] !== ($_SESSION['oauth_state'] ?? null)) {
    exit('State non valido');
}

$tokenContext = stream_context_create([
    'http' => [
        'method' => 'POST',
        'header' => 'Content-Type: application/x-www-form-urlencoded',
        'content' => http_build_query([
            'grant_type' => 'authorization_code',
            'client_id' => $clientId,
            'client_secret' => $clientSecret,
            'code' => $_GET['code'],
            'redirect_uri' => $redirectUri
        ])
    ]
]);

$tokenResponse = file_get_contents('https://www.simosnap.org/rest/service.php/oauth/token', false, $tokenContext);
$tokenData = json_decode($tokenResponse, true);

if (empty($tokenData['access_token'])) {
    exit('Access token non ricevuto');
}

$userContext = stream_context_create([
    'http' => [
        'method' => 'GET',
        'header' => 'Authorization: Bearer ' . $tokenData['access_token']
    ]
]);

$userResponse = file_get_contents('https://www.simosnap.org/rest/service.php/oauth/userinfo', false, $userContext);
$userInfo = json_decode($userResponse, true);

$_SESSION['user_uid'] = $userInfo['uid'];
$_SESSION['user_nickname'] = $userInfo['nickname'];

header('Location: /');
exit;

Sicurezza e buone pratiche

OAuth è semplice da integrare, ma richiede attenzione nella gestione di redirect, state, secret e token.

La Redirect URI deve combaciare esattamente con quella registrata. SimosNap rifiuta richieste con Redirect URI non autorizzate.
State

Verifica sempre lo state

Genera uno state casuale per ogni login, salvalo in sessione e confrontalo nella callback prima di scambiare il code.

Secret

Proteggi il Client Secret

Il Client Secret identifica la tua applicazione. Deve restare sul server e non deve essere condiviso pubblicamente.

Token

Non stampare i token

Access token e refresh token non devono comparire in URL, pagine HTML, log pubblici o messaggi di errore visibili agli utenti.

HTTPS

Usa solo connessioni sicure

Registra Redirect URI HTTPS e proteggi la callback della tua applicazione con una configurazione web corretta.

Errori comuni

Gli errori OAuth indicano che una richiesta non è valida, che il consenso è stato annullato o che un token non può essere usato.

invalid_client

Client non valido

Il Client ID non esiste, l’applicazione è disabilitata oppure il Client Secret non corrisponde.

invalid_grant

Code non valido o scaduto

L’authorization code è già stato usato, è scaduto o non corrisponde alla Redirect URI usata nella richiesta originale.

invalid_scope

Permessi non validi

L’applicazione ha richiesto scope non esistenti o non autorizzati per quel client.

access_denied

Accesso annullato

L’utente ha annullato l’autorizzazione. La tua applicazione dovrebbe mostrare un messaggio chiaro e permettere di riprovare.