Ho svolto ricerche su oauth2 recentemente e ho cercato di redigere un piano di implementazione. Tuttavia mi sembra che manchi qualcosa, o qualcosa non è ancora abbastanza cliccato.
Ho intenzione di creare un'API e di proteggere determinati endpoint, richiedendo l'autorizzazione. Questa API sarà accessibile tramite la mia prima applicazione Web di partito che utilizza javascript / vuejs.
Per riuscirci, il "Flusso della password del proprietario della risorsa" sembra essere la scelta migliore per consentire ai proprietari di risorse di autenticarsi per ottenere l'accesso a parti dell'API. L'implementazione specifica che ho scelto di utilizzare per oauth2 è "Passport" di laravel. Di seguito è riportato un codice di esempio per il flusso della password e il layout della tabella utilizzato da questa implementazione:
$response = $http->post('http://your-app.com/oauth/token', [
'form_params' => [
'grant_type' => 'password',
'client_id' => 'client-id',
'client_secret' => 'client-secret',
'username' => '[email protected]',
'password' => 'my-password',
'scope' => '',
],
]);
+-------------------------+
|oauth_clients |
+-------------------------+
|id |
|user_id |
|name |
|secret |
|redirect |
|personal_access_client |
|revoked |
|updated_at |
|created_at |
+-------------------------+
+-------------------------+
|oauth_auth_codes |
+-------------------------+
|id |
|user_id |
|client_id |
|scopes |
|revoked |
|expires_at |
+-------------------------+
+-------------------------+
|oauth_access_tokens |
+-------------------------+
|id |
|user_id |
|client_id |
|name |
|scopes |
|revoked |
|created_at |
|updated_at |
|expires_at |
+-------------------------+
+-------------------------+
|oauth_refresh_tokens |
+-------------------------+
|id |
|access_token_id |
|revoked |
|expires_at |
+-------------------------+
+------------------------------+
|oauth_personal_access_clients |
+------------------------------+
|id |
|client_id |
|updated_at |
|created_at |
+------------------------------+
Nella richiesta di esempio sopra, sono richiesti client_id
e client_secret
insieme a username
e password
. Non riesco a vedere come chiamare http://your-app.com/oauth/token
con i parametri forniti consentirebbe a un proprietario di risorse di autenticarsi, poiché non esiste alcuna tabella che memorizzi username
e password
del proprietario di una risorsa.
Qualcuno potrebbe spiegarmi cosa sta succedendo qui o quali pezzi del puzzle mi mancano? Il server di autorizzazione OAuth2 deve essere collegato alla mia API (server delle risorse) in qualche modo che consente al server di autorizzazione di autenticare gli utenti in base al loro nome utente e password? ...