Les gens,
Pouvez-vous me préciser la différence et le but de ces deux méthodes ?
- Microsoft.Extensions.DependencyInjection.OAuthExtensions.AddOAuth() ;
- Microsoft.Extensions.DependencyInjection.OpenIdConnectExtensions.AddOpenIdConnect().
Selon le nom, l'un est utilisé pour autoriser, l'autre pour authentifier l'utilisateur, n'est-ce pas ? Donc si mon application mvc a besoin de savoir qui est l'utilisateur, je dois utiliser .AddOpenIdConnect()
pour aller chercher id_token
? Et si j'ai besoin d'appeler le service de ressources depuis l'application mvc pour le compte de l'utilisateur actuel, je dois ajouter .AddOAuth()
pour obtenir access_token
?
Des expériences avec auth0.com ont montré que le code avec .AddOAuth()
est capable d'obtenir un jeton d'accès comme résultat de l'opération HttpContext.GetTokenAsync("access_token")
mais rien si HttpContext.GetTokenAsync("id_token")
.
Et vice-versa - .AddOpenIdConnect()
peut obtenir id_token, mais pas access_token.
La configuration est la même pour les deux :
.AddOAuth("oauth", o =>
{
o.AuthorizationEndpoint = "https://<Realm>.auth0.com/authorize?audience=resourceAPI-server";
o.TokenEndpoint = "https://<REALM>.auth0.com/oauth/token";
o.ClientId = "<clientID>";
o.ClientSecret = "<secret>";
o.CallbackPath = "/cb_oauth";
o.SaveTokens = true;
})
.AddOpenIdConnect("openIdConnect", o =>
{
o.Authority = "https://<REALM>.auth0.com";
o.ClientId = "<clientID>";
o.ClientSecret = "<secret>";
o.CallbackPath = "/cb_openIdConnect";
o.SaveTokens = true;
o.Events =new OpenIdConnectEvents()
{
OnRedirectToIdentityProvider = rc =>
{
rc.ProtocolMessage.SetParameter("audience","resourceAPI-server");
return Task.CompletedTask;
}
};
})
C'est vraiment étrange, car je peux obtenir les deux tokens (access et id) dans postman avec le flux de code et la portée. openid email profile
.
Les tutoriels sur auth0.com montrent également que .AddOpenIdConnect() avec une portée supplémentaire peut également obtenir un jeton d'accès. C'est très déroutant.
Alors, lequel pour quel cas ?