|
| 1 | +--- |
| 2 | +title: "Open Auth" |
| 3 | +date: 2024-06-20T11:36:46+02:00 |
| 4 | +weight: 2 |
| 5 | +--- |
| 6 | + |
| 7 | +## Introduction |
| 8 | + |
| 9 | +[Open Auth](https://github.com/litarvan/openauth) est une librairie Java développée par [Litarvan](https://github.com/litarvan) qui offre une méthode rapide pour s'authentifier via les services officiels pour un client Minecraft. |
| 10 | +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. |
| 11 | + |
| 12 | +## Importer la librairie |
| 13 | + |
| 14 | +Cette librairie est hébergée sur le maven de Litarvan, vous pouvez donc l'importer dans votre projet comme ceci : |
| 15 | + |
| 16 | +Avec Gradle : |
| 17 | + |
| 18 | +```groovy {filename=build.gradle} |
| 19 | +repositories { |
| 20 | + mavenCentral() |
| 21 | + maven { |
| 22 | + url = 'https://jitpack.io' |
| 23 | + name = 'JitPack' |
| 24 | + } |
| 25 | +} |
| 26 | +
|
| 27 | +dependencies { |
| 28 | + implementation 'com.github.litarvan:openauth:518589d222' |
| 29 | +} |
| 30 | +
|
| 31 | +``` |
| 32 | + |
| 33 | +Avec Maven : |
| 34 | + |
| 35 | +```xml {filename=pom.xml} |
| 36 | +<repositories> |
| 37 | + <repository> |
| 38 | + <id>JitPack</id> |
| 39 | + <url>https://jitpack.io</url> |
| 40 | + </repository> |
| 41 | +</repositories> |
| 42 | +<dependencies> |
| 43 | + <dependency> |
| 44 | + <groupId>com.github.litarvan</groupId> |
| 45 | + <artifactId>openauth</artifactId> |
| 46 | + <version>518589d222</version> |
| 47 | + </dependency> |
| 48 | +</dependencies> |
| 49 | +``` |
| 50 | + |
| 51 | +{{< callout emoji="✅" type="info" >}} |
| 52 | +À l'heure où est écrit ce tutoriel, la dernière version disponible est la |
| 53 | +**1.1.5** (qui est le commit `518589d222`, puisque cette version n'a pas été publié). Allez sur la page des |
| 54 | +[releases](https://github.com/Litarvan/OpenAuth/releases) pour voir la |
| 55 | +dernière version disponible. |
| 56 | +{{< /callout >}} |
| 57 | + |
| 58 | +## Authentification |
| 59 | + |
| 60 | +Plusieurs méthodes d'auth sont disponibles en fonction des besoins de l'application que vous développez. |
| 61 | + |
| 62 | +{{< callout emoji="⚠️" type="warning" >}} |
| 63 | +Il faut choisir **une seule** méthode d'auth parmi les suivantes. |
| 64 | +{{< /callout >}} |
| 65 | + |
| 66 | +Pour toutes les méthodes d'auth suivantes, il faut déclarer un objet de type `MicrosoftAuthenticator` comme ceci : |
| 67 | + |
| 68 | +```java |
| 69 | +MicrosoftAuthenticator authenticator = new MicrosoftAuthenticator(); |
| 70 | +``` |
| 71 | + |
| 72 | +### Auth par "Credentials": |
| 73 | + |
| 74 | +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. |
| 75 | +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". |
| 76 | +Voici comment l'utiliser : |
| 77 | + |
| 78 | +```java |
| 79 | +// ... |
| 80 | +MicrosoftAuthResult result = authenticator.loginWithCredentials("email", "password"); |
| 81 | +``` |
| 82 | + |
| 83 | +### Auth par "WebView": |
| 84 | + |
| 85 | +Cette méthode permet de se connecter avec une interface de connexion Microsoft, comme ceci : |
| 86 | + |
| 87 | + |
| 88 | + |
| 89 | +Voici comment l'utiliser : |
| 90 | + |
| 91 | +```java |
| 92 | +... |
| 93 | +MicrosoftAuthResult result = authenticator.loginWithWebView(); |
| 94 | +``` |
| 95 | + |
| 96 | +{{< callout emoji="✅" type="info" >}} |
| 97 | +Attention, cette méthode n'est pas une méthode asynchrone, c'est a dire que |
| 98 | +votre programme ne tournera plus en arrière plan lorsque cette fenêtre sera |
| 99 | +ouverte si elle n'est pas ouverte dans un autre thread. Cela peut causer des |
| 100 | +problèmes, par exemple : votre interface graphique pourra être gelée et vous |
| 101 | +aurez un beau message de votre OS vous informant que le programme ne répond |
| 102 | +plus. |
| 103 | +{{< /callout >}} |
| 104 | + |
| 105 | +Si vous voulez utiliser la méthode asynchrone, utilisez simplement `loginWithAsyncWebView` au lieu de `loginWithWebView`; |
| 106 | + |
| 107 | +### Auth par "RefreshToken: |
| 108 | + |
| 109 | +Cette méthode d'auth permet de se connecter avec un _refresh_token_, elle est utilisée pour éviter de se reconnecter à chaque lancement. |
| 110 | +Le _refresh_token_ est récupérable avec une authentification basique, sauvegardez le dans un fichier pour le récupérer au prochain lancement. |
| 111 | +Voici comment l'utiliser : |
| 112 | + |
| 113 | +```java |
| 114 | +// ... |
| 115 | +MicrosoftAuthResult result = authenticator.loginWithRefreshToken("refresh token"); |
| 116 | +``` |
| 117 | + |
| 118 | +### Auth par "DeviceId" |
| 119 | + |
| 120 | +_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_ |
| 121 | + |
| 122 | +## Résultat |
| 123 | + |
| 124 | +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 : |
| 125 | + |
| 126 | +- le profil avec la méthode `result.getProfile()` |
| 127 | +- l'accesToken avec la méthode `result.getAccessToken()` |
| 128 | +- le refreshToken avec la méthode `result.getRefreshToken()` |
| 129 | +- l'xuid avec la méthode `result.getXuid()` |
| 130 | +- le clientId avec la méthode `result.getClientId()` |
| 131 | + |
| 132 | +Les deux derniers ids sont nécessaires notamment pour les authentifications à partir de la 1.18. |
| 133 | + |
| 134 | +### Le profil |
| 135 | + |
| 136 | +La méthode `result.getProfile()` retourne uen objet de type `MinecraftProfile`, qui peut être utilisé avec les méthodes suivantes : |
| 137 | + |
| 138 | +- `getId()` permets de récupérer l'UUID du compte minecraft |
| 139 | +- `getName()` permets de récupérer le nom du compte du joueur |
| 140 | +- `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](https://github.com/Litarvan/OpenAuth/blob/518589d22210bf0763d9ae19d546ddf1dba3fb8c/src/main/java/fr/litarvan/openauth/microsoft/model/response/MinecraftProfile.java#L60)) |
| 141 | + |
| 142 | +### Les tokens |
| 143 | + |
| 144 | +- L'_acces token_ est utilisé pour lancer le jeu, par exemple avec la librairie [OpenLauncherLib](https://github.com/FlowArg/OpenLauncherLib) |
| 145 | +- 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. |
0 commit comments