Sto cercando di capire concettualmente e praticamente come eseguire un oauth2 con flusso openID-connect nella mia applicazione web-api, utilizzando Azure AD.Creazione di un'API Web con Oauth2/OpenID connect
Importantemente, quando viene effettuata una richiesta all'API, desidero conoscere lo che ha effettuato la richiesta da.
mia comprensione attuale è: -
- Il mio cliente rileverebbe che l'utente non è connesso e reindirizzare a un segno-in.
- L'utente fornisce le proprie credenziali e viene reindirizzato al client, insieme a un token oauth2.
- Questo token verrebbe fornito agli endpoint Web-API per qualsiasi richiesta.
Questo è dove diventa torbido per me.
Come utilizzare esattamente questo token per autorizzare l'accesso a una particolare risorsa, determinare chi sta accedendo alla risorsa e qual è il meccanismo che lo fa?
Suppongo che avrei bisogno di riutilizzare il token per effettuare una chiamata all'endpoint utente di Azure AD: se il token era effettivamente valido, l'endpoint AD restituirebbe i dettagli degli utenti, fornendo in tal modo alcuni mezzi determinare che il token è valido e fornire dettagli sull'identità dell'utente. L'autorizzazione all'accesso a una risorsa può essere eseguita tramite l'appartenenza ai gruppi in Azure AD.
MA ...
posso solo supporre questo un problema risolto, e hanno notato l'uso di OWIN middleware come da questo esempio
https://github.com/AzureADSamples/WebApp-WebAPI-OpenIDConnect-DotNet
Ma sono ancora piuttosto incerti su cosa sta succedendo esattamente.
Il servizio fa menzione di ambiti e attestazioni, ma non capisco da dove sono derivati (presumo da un token fornito dal client, ma non sono sicuro). Il servizio deve ricevere informazioni sull'identità nella chiamata.
Il che mi porta a due punti, per questo di essere sicuro -
Il token previsto chiamata al servizio avrebbe bisogno di essere assicurati in trasmissione (da qui l'uso di HTTPS) - per prevenire MITM .
È necessario firmare il token come - credo usando il client secret o qualcosa del genere - per impedire che le informazioni nel token vengano falsificate.
Qualcuno può aiutarmi a chiarire questo caos confuso?
In particolare -
Come è l'identità del chiamante API determinato - è l'identità determinata da una chiamata nel client o il server?
Come limitare l'accesso ad alcuni endpoint dell'API in base a un ruolo utente?
Cosa devo fare per ottenere questo risultato basandosi sul middleware e sulle librerie esistenti disponibili?
Suggerisco di suddividere questo in poche domande StackOverflow. –