9
votes

Ajouter des revendications avec middleware Owin

est-il possible d'une implémentation de middleware Owin d'ajouter des revendications avant l'exécution d'un contrôleur d'API Web?

Création d'une implémentation OwinMidDleware et a ajouté une identité: p>

 var id = new ClaimsIdentity();
 id.AddClaim(new Claim("Whatever", "is possible"));
 context.Authentication.User.AddIdentity(id);

 await Next.Invoke(context);


1 commentaires

Après une conversation avec @PinPoint sur le lobby Owin dans Jabbr, il apparaît que la seule façon de passer à la ligne d'authentification est via l'utilisation de l'utiloauthéthère IAPPBuilder en spécifiant un fournisseur personnalisé. Les revendications peuvent ensuite être ajoutées dans le contexte d'identité (context.ticket.entity.addClaim (...)). Ceci est fait par demande.


3 Réponses :


1
votes

Vous pouvez trouver utile hériter de l'attribut Autorisate et l'étendre à vos besoins: xxx pré>

et dans votre contrôleur: p>

[DemoAuthorize]
public class ValuesController : ApiController{


1 commentaires

Seul le problème que j'ai trouvé avec ceci est si vous prenez en charge plusieurs méthodes d'autorisation par exemple. OAuth et HMAC Vous devez mettre en œuvre l'enrichissement des sinistres dans plusieurs endroits, d'où ma réponse ci-dessous.



4
votes

Il existe déjà une classe qui peut fournir des réclamations d'enrichissement revendicationAuthenticationManager, que vous pouvez étendre afin qu'il gère vos revendications spécifiques à un domaine, par exemple ... xxx pré>

la tâche suivante consiste à fournir le middleware approprié invoquer cela. Pour mes projets, j'ai écrit les classes suivantes ... p> xxx pré>

, puis une extension de câblage ... p> xxx pré>

Je sais que c'est le localisateur de service Anti-motif, mais à l'aide d'IServiceProvider est neutre du conteneur et semble être le moyen accepté de mettre les dépendances dans le middleware Owin. P>

Enfin, vous devez le faire filer dans votre démarrage, votre exemple ci-dessous. Présume l'unité et l'enregistrement / exposition d'une propriété IServiceLocator ... p>

// Owin config
app.UseClaimsTransformation(UnityConfig.ServiceLocator);


0 commentaires

1
votes

Voici comment j'ai fini par ajouter une nouvelle réclamation dans Owin Middleware, sur la base du commentaire de l'OP sur l'accrochage dans UseOauthBerAuthentication. Il utilise IdentityServer.Accesstokenvalidation, qui appelle UseoauthberArentication en interne et transmet l'oauthbeereraThenticationProvider à ce sujet.

using System.Security.Claims;
using System.Threading.Tasks;
using IdentityServer3.AccessTokenValidation;
using Owin;
using Microsoft.Owin.Security.OAuth;

//...

public void Configuration(IAppBuilder app)
{
    app.UseIdentityServerBearerTokenAuthentication(new IdentityServerBearerTokenAuthenticationOptions
    {
        Authority = "http://127.0.0.1/identityserver", 
        TokenProvider = new OAuthBearerAuthenticationProvider
        {
            OnValidateIdentity = AddClaim
        }
    });
}

private Task AddClaim(OAuthValidateIdentityContext context)
{
    context.Ticket.Identity.AddClaim(new Claim("test", "123"));
    return Task.CompletedTask;
}


0 commentaires