2017-10-16 4 views
0

J'utilise OpenIddict pour l'authentification/autorisation.
Je dois vérifier manuellement le jeton d'accès et obtenir l'utilisateur (ClaimsPrincipal) derrière ce jeton. Comment?OpenIddict: Comment vérifier manuellement le jeton d'accès et obtenir l'identité

Cas d'utilisation:
J'utilise SignalR. À chaque appel de méthode du client, je voudrais vérifier si l'utilisateur est authentifié. Mon plan est d'envoyer un jeton d'accès depuis Angular et de le vérifier dans la méthode Hub. Fondamentalement, la même chose doit se produire lorsque j'utilise l'attribut [Authorize] sur le contrôleur.

Répondre

1

En supposant que cette question est liée à How to authorize SignalR Core Hub method with JWT, je ne vous recommande pas de décrypter les jetons d'accès opaque émis par OpenIddict vous-même.

Si vous voulez vraiment faire vous-même, vous pouvez manuellement instancier une instance TicketDataFormat avec les « chaînes de but » la protection des données de base utilisées par ASP.NET OpenIddict:

// Resolve the data protection provider from the DI container. 
// Depending on where this snippet is used, you must be able 
// to directly use constructor injection (e.g in a controller). 
var provider = app.ApplicationServices.GetRequiredService<IDataProtectionProvider>(); 

var protector = provider.CreateProtector(
    nameof(OpenIdConnectServerHandler), 
    nameof(OpenIdConnectServerOptions.AccessTokenFormat), 
    OpenIdConnectServerDefaults.AuthenticationScheme); 

var format = new TicketDataFormat(protector); 

// If the access token is not malformed, a non-null value 
// is returned. Note that you'll have to manually validate 
// the expiration date and the audience of the ticket. 
var ticket = format.Unprotect("your access token");