AzAuth
AzAuth est une API permettant d’authentifier les utilisateurs avec Azuriom. Elle peut être utilisée en Java, en JavaScript, ou tout autre langage capable d’effectuer des requêtes HTTP.
Avant d’utiliser AzAuth, assurez-vous qu’elle est activée dans le panel administrateur (dans Paramètres → Authentification).
Quel que soit le mode d’utilisation de l’API côté client, vous devez vérifier le token d’accès côté serveur. Cela peut être fait en appelant le point d’accès/verify
ou en utilisant la méthodeverify
.
Java
Les sources d’AzAuth Java sont disponibles sur GitHub,
et le fichier jar
peut être téléchargé depuis les releases GitHub.
La méthode recommandée pour utiliser AzAuth dans un projet est d’utiliser un gestionnaire de dépendances comme Maven ou Gradle.
Installation
Avec Gradle, ajoutez ces lignes dans votre fichier build.gradle
:
repositories {
mavenCentral()
}
dependencies {
implementation 'com.azuriom:azauth:1.0.0'
}
Avec Maven, ajoutez ces lignes dans votre fichier pom.xml
:
<dependencies>
<dependency>
<groupId>com.azuriom</groupId>
<artifactId>azauth</artifactId>
<version>1.0.0</version>
</dependency>
</dependencies>
Utilisation
AzAuth est léger et utilise comme seule dépendance Google Gson.
Le point d’entrée de la librairie est la classe AuthClient
, dont vous pouvez créer une instance en passant l’URL de votre site Azuriom.
Ensuite, vous pouvez utiliser la méthode login(String username, String password, Supplier<String> codeSupplier)
Le codeSupplier
est appelé lorsque l’utilisateur a activé la 2FA, et le code de l’utilisateur doit être renvoyé par ce fournisseur.
Un exemple d’utilisation d’AzAuth dans une application Java :
public static User auth(String username, String password) throws AuthException {
// IMPORTANT : Remplacez <url> par l'URL de votre site Azuriom
AuthClient authenticator = new AuthClient("<url>");
return authenticator.login(username, password, () -> {
String code = null;
while (code == null || code.isEmpty()) {
// IMPORTANT : Remplacez <code_2fa> par le code temporaire de l'utilisateur
code = "<code_2fa>";
}
return code;
});
}
Utilisation avec OpenLauncherLib
Pour un launcher Minecraft utilisant OpenLauncherLib, la méthode auth
ressemble généralement de base à ceci :
public static void auth(String username, String password) throws AuthenticationException {
Authenticator authenticator = new Authenticator(Authenticator.MOJANG_AUTH_URL, AuthPoints.NORMAL_AUTH_POINTS);
AuthResponse response = authenticator.authenticate(AuthAgent.MINECRAFT, username, password, "");
authInfos = new AuthInfos(response.getSelectedProfile().getName(), response.getAccessToken(), response.getSelectedProfile().getId());
}
Cette méthode peut être remplacée par le code suivant pour utiliser AzAuth à la place du système d’authentification de Mojang :
public static void auth(String username, String password) throws AuthException {
// IMPORTANT : Remplacez <url> par l'URL de votre site Azuriom
AuthClient authenticator = new AuthClient("<url>");
authInfos = authenticator.login(username, password, () -> {
String code = null;
while (code == null || code.isEmpty()) {
// IMPORTANT : Le composant parent pour la boîte de dialogue.
// Remplacez le code ci-dessous par une instance de votre frame/panel/etc. de launcher.
Container parentComponent = LauncherFrame.getInstance().getLauncherPanel();
parentComponent.setVisible(true);
code = JOptionPane.showInputDialog(parentComponent, "Entrez votre code 2FA", "2FA", JOptionPane.PLAIN_MESSAGE);
}
return code;
}, AuthInfos.class);
}
JavaScript
Installation
Le code source est disponible sur GitHub, et peut être installé via npm :
npm install azuriom-auth
Utilisation
Le point d’entrée est la classe AuthClient
, dont vous pouvez créer une instance en passant l’URL de votre site Azuriom.
Ensuite, vous pouvez utiliser la méthode login
pour authentifier un utilisateur.
import { AuthClient } from 'azuriom-auth'
async function login(email, password) {
// IMPORTANT : Remplacez <url> par l'URL de votre site Azuriom
const client = new AuthClient('<url>')
let result = await client.login(email, password)
if (result.status === 'pending' && result.requires2fa) {
// IMPORTANT : Remplacez <code_2fa> par le code temporaire de l'utilisateur
const twoFactorCode = '<code_2fa>'
result = await client.login(email, password, twoFactorCode)
}
if (result.status !== 'success') {
throw 'Unexpected result: ' + JSON.stringify(result)
}
return result
}
API HTTP
AzAuth peut être utilisé dans n’importe quel langage, sans utiliser de bibliothèque spécifique, en effectuant directement des requêtes HTTP vers les points d’accès de l’API.
L’API utilise le format JSON, et le chemin de base est /api/auth
.
Un code de statut HTTP 200 est renvoyé en cas de succès, et 422 en cas de paramètres manquants ou invalides. Les dates sont renvoyées au format ISO 8601.
Points d’accès
Authentification
POST /authenticate
Authentifier un utilisateur avec ses identifiants du site.
Requête
Champ | Description |
---|---|
Nom d’utilisateur ou adresse email | |
password | Mot de passe |
code | Code 2FA, doit être inclus uniquement si la réponse a status à pending et que reason est 2fa |
Réponse
Retourne l’utilisateur avec ses différentes informations ainsi que le jeton (token) unique pour vérifier la connexion ou pour la déconnexion.
Exemple de réponse de succès (HTTP 2xx
) :
{
"id": 1,
"username": "Username",
"uuid": "00000000-0000-0000-0000-000000000000",
"email_verified": true,
"money": 100.0,
"role": {
"name": "Member",
"color": "#e10d11"
},
"banned": false,
"created_at": "2020-06-29T17:39:12+00:00",
"access_token": "xxxxxxxx"
}
Exemple de réponse d’erreur (HTTP 4xx
) :
{
"status": "error",
"reason": "invalid_credentials",
"message": "Invalid credentials"
}
Vérification
POST /verify
Requête
Champ | Description |
---|---|
access_token | Jeton d’accès unique |
Réponse
Retourne l’utilisateur avec ses différentes informations ainsi que le jeton (token) unique pour la déconnexion.
Exemple de réponse de succès (HTTP 2xx
) :
{
"id": 1,
"username": "Username",
"uuid": "00000000-0000-0000-0000-000000000000",
"email_verified": true,
"money": 100.0,
"role": {
"name": "Member",
"color": "#e10d11"
},
"banned": false,
"created_at": "2020-06-29T17:39:12+00:00",
"access_token": "xxxxxxxx"
}
Exemple de réponse en cas d’erreur (HTTP 4xx
) :
{
"status": "error",
"reason": "invalid_credentials",
"message": "Invalid credentials"
}
Déconnexion
POST /logout
Déconnecte l’utilisateur et invalide le jeton d’accès.
Requête
Champ | Description |
---|---|
access_token | Token d’accès unique de l’utilisateur |
Réponse
Réponse vide, avec un code de statut 2xx
en cas de succès.