Un mémo lors de l'utilisation du service cloud Authlete pour créer rapidement un serveur OAuth.
Authlete est un service cloud permettant de créer un serveur OAuth2.0 et un fournisseur OpenID. Pour construire un serveur prenant en charge OAuth 2.0 et OpenID Connect avec Honki, c'est une évidence, mais en déléguant le processus Mendokusai à Authlete, vous pouvez facilement créer un serveur d'autorisation.
Pour simplifier l'article, nous supposerons que vous avez une certaine connaissance d'OAuth / OpenID Connect. Connaissez-vous la séquence de traitement du flux d'octroi de code d'autorisation?
Mac OS X 10.12.6 (macOS Sierra) Apache Maven 3.2.3 Java version: 1.8.0_25 git version 2.11.0 (Apple Git-81)
Je le fais dans, mais si maven et git fonctionnent, je pense que tout ce qui y compris le système d'exploitation est OK
De plus, les personnages tels que divers serveurs sont les suivants:
Nom du serveur | Utilisation | URL |
---|---|---|
java-oauth-server | Un serveur qui gère les informations d'autorisation pour chaque ID utilisateur. Appelé un serveur d'autorisation | http://oauth.example.com:8080/ |
java-resource-server | Un serveur avec des données et des fonctions pour chaque ID utilisateur. Appelé un serveur de ressources | http://resource.example.com:8081/ |
java-oauth-client | Application Web qui utilise les ressources du serveur de ressources | http://client.example.com:8082/ |
Dans cet environnement, chaque serveur va être démarré localement, veuillez donc résoudre le nom en 127.0.0.1 avec / etc / hosts selon le cas. Bien sûr, vous pouvez le donner à n'importe quel endroit tel que EC2 d'AWS.
Le flux général est le suivant.
Tout d'abord, inscrivez-vous pour utiliser Authlete. Inscrivez-vous depuis l'épaule droite de https://www.authlete.com/.
Sur l'écran suivant, entrez votre identifiant / mot de passe / adresse comme indiqué ci-dessous.
Une fois l'inscription terminée, la première page s'affiche.
Il semble qu'un compte a été créé et qu'un serveur d'autorisation (Service 385xxxxxxxx) a déjà été créé.
La clé API et le secret API sont affichés, mais comme ils seront utilisés plus tard lors de la création d'un serveur d'autorisation et d'un serveur de ressources,
Clé API | Secret de l'API |
---|---|
385xxxxxxxx | NeE89hxxxxxxxxxxxxxxxxxxx |
Prenez-en note.
À propos, la prochaine connexion sera https://so.authlete.com/ Connectez-vous avec votre identifiant / mot de passe Cocokara.
Si vous accédez à l'URL de "Client App Developer Console" dans la capture ci-dessus, vous verrez un écran de connexion pour les développeurs clients, qui est différent de celui ci-dessus. Il s'agit de l'écran de gestion du client OAuth et vous pouvez vous connecter avec la clé API ci-dessus (385xxxxxxxx) et le secret API (NeE89hxxxxxxxxxxxxxxxxxxxx).
Lorsque vous vous connectez, le nom du client (Client 4455xxxx) s'affiche comme ci-dessus, et l'ID client et le secret client de ce client s'affichent. Notez-les car ils seront utilisés plus tard lors de la création d'un client OAuth ou d'une application Web.
identité du client | Secret du client |
---|---|
4455xxxx | FZlETE9xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx |
Eh bien, une fois organisé jusqu'à présent,
A été payé. Lorsque vous créez un compte pour Authlete, un serveur d'autorisation (Service 385xxxxxxxx) est créé et un client (Client 4455xxxxx) qui lui est associé semble être créé automatiquement.
Ensuite, créez un serveur d'autorisation qui autorise le client OAuth à accéder aux informations utilisateur et un serveur de ressources qui reçoit les demandes du client OAuth et exécute le traitement conformément aux autorisations.
Dans cette construction, j'utiliserai le code suivant fourni par Authlete.
Pour créer, tout ce que vous avez à faire est de supprimer le code ci-dessus de GitHub et d'écrire la clé d'API et le secret d'API qui ont été émis lors de votre inscription au fichier de configuration.
Créez un serveur d'autorisation. Tout ce que vous avez à faire est de cloner le référentiel et de définir la clé API et le secret API dans le fichier de paramètres (authlete.properties).
$ git clone https://github.com/authlete/java-oauth-server.git
$ cd java-oauth-server
$ cat authlete.properties
service.api_key =385xxxxxxxx ← Veuillez changer la clé API correcte
service.api_secret =NeE89hxxxxxxxxxxxxxxxxxxx ← Veuillez changer le bon secret API
$ mvn clean jetty:run
Ensuite, créez un serveur de ressources. Tout ce que vous avez à faire est de cloner le référentiel et de définir la clé API et le secret API dans le fichier de paramètres (authlete.properties). C'est le même travail que le serveur d'autorisation.
$ git clone https://github.com/authlete/java-resource-server.git
$ cd java-resource-server/
$ cat authlete.properties
service.api_key =385xxxxxxxx ← Veuillez changer la clé API correcte
service.api_secret =NeE89hxxxxxxxxxxxxxxxxxxx ← Veuillez changer le bon secret API
$ mvn clean jetty:run
À propos, le serveur de ressources est
curl http://resource.example.com:8081/api/country/JP -H "Authorization: Bearer xxxxxxxxxxx" -G
Si vous demandez l'autorisation avec un jeton d'accès, si le jeton d'accès est correct,
{
"name": "Japan",
"alpha2": "JP",
"alpha3": "JPN",
"numeric": 392,
"currency": "JPY"
}
Il est fait pour renvoyer une réponse comme.
Ceci termine la construction du serveur d'autorisation et du serveur de ressources.
Ensuite, communiquez depuis l'application Web. L'application Web a une URL http://client.example.com:8082/RedirectServlet Supposer que Essayez d'utiliser le même servlet http://client.example.com:8082/RedirectServlet comme destination de redirection après avoir obtenu le code d'autorisation.
À propos, la séquence de traitement du flux d'octroi de code d'autorisation est la suivante. Lorsque Authlete est invité par le serveur d'autorisation à émettre un code d'autorisation, émet un jeton d'accès basé sur le code d'autorisation, ou lorsque le serveur de ressources reçoit un jeton d'accès d'une application Web, le jeton d'accès est-il correct? Il vous dira à qui le jeton est associé.
Enregistrez l'URI de destination de la redirection de cette application Web dans Authlete. Ouvrez la console de développement d'application client et cliquez sur le bouton Modifier en bas.
Après cela, il y a un paramètre appelé URI de redirection dans l'onglet Autorisation, alors écrivez «http://client.example.com:8082/RedirectServlet» et cliquez sur le bouton de mise à jour pour terminer.
Il a été enregistré.
L'application Web est comme indiqué dans le diagramme de séquence ci-dessus
De quel type de flux de traitement s'agit-il, mais comme j'ai créé un tel servlet, j'utiliserai ce projet tel quel.
Après la suppression, modifiez les valeurs de client_id et client_secret dans le fichier de paramètres (settings1.properties) en ID client et secret client comme indiqué ci-dessous.
$ git clone https://github.com/masatomix/java-oauth-client.git
$ cd java-oauth-client/
$ git checkout -t origin/feature/forQiita
$ cat src/main/resources/settings1.properties
client_id =4455xxxx ← Veuillez changer l'ID client correct
client_secret =FZlETE9xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ← Veuillez changer le bon secret client
$ mvn clean jetty:run
Lorsque vous accédez à http://client.example.com:8082/, le lien "Traitement des autorisations avec le serveur OAuth à l'aide de Authlete." S'affiche. Cliquez dessus.
Ensuite, le serveur d'autorisation demandera "Cette application Web veut accéder à vos informations, mais les autoriser?" Comme indiqué ci-dessous, donc après y avoir réfléchi, l'utilisateur dira "Qui suis-je"? Entrez votre mot de passe et appuyez sur Autoriser pour autoriser l'accès.
Étant donné que le serveur d'autorisation et le serveur de ressources fournis par Authlete sont codés avec une authentification d'utilisateur factice,
Login ID | Password |
---|---|
john | john |
Veuillez vous authentifier et autoriser avec le compte.
Lorsque l'application Web est autorisée, un code d'autorisation est émis vers l'application Web et elle est redirigée vers le servlet d'origine avec 302. En outre, le servlet demande au serveur d'autorisation d'obtenir le jeton d'accès et obtient le jeton d'accès du serveur d'autorisation. Une fois que vous avez obtenu le jeton d'accès du serveur d'autorisation, le servlet sera dans l'en-tête HTTP
Authorization:Porteur uU3Xml7rdxxxxxxxxx ← Jeton d'accès
Pour demander au serveur de ressources d'acquérir des données. Après avoir demandé à Authlete de vérifier la validité du jeton, le serveur de ressources exécute la logique et renvoie les données au servlet.
C'est OK si une série de ces processus est effectuée et que les données sont finalement renvoyées à l'écran.
Je vous remercie pour votre travail acharné.
Dans le traitement dans le servlet
J'ai écrit diverses choses telles que, mais si vous êtes intéressé, veuillez vous référer au code.
En passant, veuillez noter qu'il existe diverses considérations liées à la sécurité telles que les mesures CSRF lors de la construction de la production réelle.
OAuth 2.0 + OpenID Connect full scratch implémenteur partage des informations OAuth et OpenID Connect sont expliqués en détail. Cela a été assez rafraîchissant. Merci beaucoup.
[2nd] OAuth 2.0 + OpenID Connect full scratch implémenteur parle de ses découvertes C'était.
Configurer un serveur OAuth 2.0 et API Web à très haute vitesse en utilisant Authlete La majeure partie du premier semestre était basée sur la description de ce site! Je vous remercie!
Procédure de création d'un serveur d'autorisation avec Authlete (version compatible CIBA) Communication avec Authlete compatible CIBA
Serveur d'autorisation: java-oauth-server
Serveur de ressources: java-resource-server
Application Web: java-oauth-client
Recommended Posts