Open Auth

Open Auth

Introduction

Open Auth est une librairie Java développée par Litarvan qui offre une méthode rapide pour s’authentifier via les services officiels pour un client Minecraft. Dans cet article, nous parlerons exclusivement de l’authentification (cité sous le nom “d’auth” à partir de maintenant) par un compte Microsoft. En effet, désormais Mojang supporte uniquement cette méthode.

Importer la librairie

Cette librairie est hébergée sur le maven de Litarvan, vous pouvez donc l’importer dans votre projet comme ceci :

Avec Gradle :

build.gradle
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
repositories {
    mavenCentral()
    maven {
        url = 'https://jitpack.io'
        name = 'JitPack'
    }
}

dependencies {
    implementation 'com.github.litarvan:openauth:518589d222'
}

Avec Maven :

pom.xml
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
<repositories>
    <repository>
        <id>JitPack</id>
        <url>https://jitpack.io</url>
    </repository>
</repositories>
<dependencies>
    <dependency>
        <groupId>com.github.litarvan</groupId>
        <artifactId>openauth</artifactId>
        <version>518589d222</version>
    </dependency>
</dependencies>
À l’heure où est écrit ce tutoriel, la dernière version disponible est la 1.1.5 (qui est le commit 518589d222, puisque cette version n’a pas été publié). Allez sur la page des releases pour voir la dernière version disponible.

Authentification

Plusieurs méthodes d’auth sont disponibles en fonction des besoins de l’application que vous développez.

⚠️
Il faut choisir une seule méthode d’auth parmi les suivantes.

Pour toutes les méthodes d’auth suivantes, il faut déclarer un objet de type MicrosoftAuthenticator comme ceci :

1
MicrosoftAuthenticator authenticator = new MicrosoftAuthenticator();

Auth par “Credentials”:

Cette méthode permet de se connecter avec l’email et le mot de passe du compte Microsoft, elle peut être utile dans le cas ou l’application intègre ses propres champs de texte pour la connexion. Nonobstant, cette méthode est déconseillée car elle n’est pas sécurisée, et peut être utilisée pour récupérer des informations sensibles par l’application (puisqu’elle traîte directement les informations de connexion). De plus, cette méthode ne supporte pas la double authentification “A2F”. Voici comment l’utiliser :

1
2
// ...
MicrosoftAuthResult result = authenticator.loginWithCredentials("email", "password");

Auth par “WebView”:

Cette méthode permet de se connecter avec une interface de connexion Microsoft, comme ceci :

Image de la webview Microsoft

Voici comment l’utiliser :

1
2
...
MicrosoftAuthResult result = authenticator.loginWithWebView();
Attention, cette méthode n’est pas une méthode asynchrone, c’est a dire que votre programme ne tournera plus en arrière plan lorsque cette fenêtre sera ouverte si elle n’est pas ouverte dans un autre thread. Cela peut causer des problèmes, par exemple : votre interface graphique pourra être gelée et vous aurez un beau message de votre OS vous informant que le programme ne répond plus.

Si vous voulez utiliser la méthode asynchrone, utilisez simplement loginWithAsyncWebView au lieu de loginWithWebView;

Auth par “RefreshToken:

Cette méthode d’auth permet de se connecter avec un refresh_token, elle est utilisée pour éviter de se reconnecter à chaque lancement. Le refresh_token est récupérable avec une authentification basique, sauvegardez le dans un fichier pour le récupérer au prochain lancement. Voici comment l’utiliser :

1
2
// ...
MicrosoftAuthResult result = authenticator.loginWithRefreshToken("refresh token");

Auth par “DeviceId”

Cette auth est en cours d’écriture, elle permettrait de ne pas utiliser la webView et d’ouvrir une page internet pour taper un code, comme il est fait dans le launcher de multiMc

Résultat

Pour toutes ces méthodes d’auth, nous obtenons un objet result de type MicrosoftAuthResult. Cet objet nous permet de récupérer plusieurs informations sur le compte que nous venons de connecter :

  • le profil avec la méthode result.getProfile()
  • l’accesToken avec la méthode result.getAccessToken()
  • le refreshToken avec la méthode result.getRefreshToken()
  • l’xuid avec la méthode result.getXuid()
  • le clientId avec la méthode result.getClientId()

Les deux derniers ids sont nécessaires notamment pour les authentifications à partir de la 1.18.

Le profil

La méthode result.getProfile() retourne uen objet de type MinecraftProfile, qui peut être utilisé avec les méthodes suivantes :

  • getId() permets de récupérer l’UUID du compte minecraft
  • getName() permets de récupérer le nom du compte du joueur
  • getSkins() permets de récupérer la liste des skins du joueur sous forme de MinecraftSkin[] (je ne détaillerais pas ici l’utilisation de cette classe que vous pouvez trouver ici)

Les tokens

  • L’acces token est utilisé pour lancer le jeu, par exemple avec la librairie OpenLauncherLib
  • Le refresh token, dont nous avons déjà parlé avant, permet quant à lui de se reconnecter directement, sans avoir à rentrer de mot de passe, il est donc pratique de le sauvegarder dans un fichier après la connexion.