2017-07-29 2 views
0

Je suis en train de mettre en œuvre SSO avec des applications laravel/lumen. J'ai les suivants.Comment utiliser le jeton d'accès Oauth2 du serveur d'authentification pour autoriser les utilisateurs dans le serveur de ressources/applications?

  1. serveur Auth sur Laravel (répertoire utilisateur central, OAuth2 utilisant Laravel/passeport)
  2. du serveur de ressources de lumière (application web, aucune table d'utilisateur)
  3. application côté client de JS (ReactJS)

Le workflow:

  1. bouton de connexion sur le client prend au serveur auth, oauth2 client est autorisé par l'utilisateur et obtenir auth_code et redirigez vers le client.
  2. Le client utilise ensuite la requête POST pour envoyer des données au serveur de recours, qui obtient ensuite le access_token, refresh_token du serveur d'authentification.
  3. L'étape suivante consiste à autoriser l'utilisateur sur le serveur de ressources (serveur App) à l'aide du serveur d'authentification access_token. Je besoin d'être apatride

Voici un organigramme dans les détails (JWT?):

enter image description here

Répondre

1

Après avoir obtenu access_token vous devez envoyer en-tête d'autorisation de retour au serveur auth et il vous pouvez utiliser une action de middleware ou de contrôleur personnalisée pour authentifier et autoriser l'utilisateur.

flux de travail simple pourrait être quelque chose comme ceci:

En supposant que vous envoyez des requêtes HTTP à auth API serveur avec axios bibliothèque et l'itinéraire imaginaire est api/user/authorize, donc dans l'application front-end:

axios({ 
    method: 'get', 
    url: `http://localhost:8000/api/user/authorize`, 
    headers: { 
     'Accept': 'application/json', 
     'Authorization': `Bearer ${access_token}` 
    } 
}) 
.then(response => { 
    // stuff to do on success 
}) 
.catch(error => { 
    // stuff to do on failure 
}); 

routes/api.php:

Route::get('user/authorize', '[email protected]'); 

UserController.php:

public function isAuthorized(Request $request) 
{ 
    // Retrieving user based the on provided authorization header 
    $user = Auth::guard('api')->user(); 

    // In case of no-user 
    if (!$user) { 
    return response()->json([ 
     'isAuthorized' => false 
    ], 401); 
    } 

    return response()->json([ 
    'isAuthorized' => true 
    ], 200); 
} 

et cela peut être fait dans beaucoup d'autres façons. J'espère que vous avez l'idée!

+1

Je suis à la recherche d'un utilisateur autorisant le ** serveur de ressources ** et non le serveur d'authentification. L'utilisateur est déjà autorisé sur le serveur d'authentification car le serveur d'authentification a renvoyé le message access_token. – Sisir

+0

Aucune différence, je viens de représenter un simple flux de travail! Vous avez fourni _username_ et _password_ et obtenu 'access_token' du serveur d'authentification. À partir de maintenant, vous devez attacher ce jeton à chaque requête HTTP que vous allez effectuer sur le serveur App. Ensuite, vous devez transférer l'en-tête au serveur d'autorisation pour autoriser l'utilisateur .. – ironcladgeek

+0

d'accord, je comprends cette partie. Mais comment le serveur d'applications autorise/valide le même jeton d'accès contre lui-même? – Sisir