2017-05-04 3 views
0

J'ai de nombreuses applications et je suis en train de passer l'authentification à ADFS et j'ai besoin d'ajouter des données personnalisées pour dire un tableau de rôles de la base de données après le succès de la connexion.ajouter des données personnalisées à l'authentification ADFS

Scénario Expliqué: chaque application a sa propre base de données de rôles après authentifie l'utilisateur et l'autorisation demandée Application_AuthenticateRequest(object sender, EventArgs e) sera appelée pour que je puisse ajouter des rôles que ce genre d'affirmation

((ClaimsIdentity)((ClaimsPrincipal)currentUser).Identity) 
        .AddClaim(new Claim(ClaimTypes.Role, "role1FromDataBase")); 
       HttpContext.Current.User = currentUser; 

mais le mothod Application_AuthenticateRequest sera invoqué pour chaque requête et je ne veux pas demander les rôles de DB pour chaque fois. alors j'ai besoin d'ajouter ces rôles quelque part pour que je puisse les appeler. Bien sûr, les sessions et les cookies ne sont pas la meilleure pratique lorsque je gère l'autorisation basée sur les rôles de l'API.

les applications ont des contrôleurs et des API et mes ADFS sur Windows Server 2012

mon owin démarrage comme celui-ci

app.SetDefaultSignInAsAuthenticationType (CookieAuthenticationDefaults.AuthenticationType);

app.UseCookieAuthentication(new CookieAuthenticationOptions()); 
    app.UseWsFederationAuthentication(
     new WsFederationAuthenticationOptions 
     { 
      Wtrealm = realm, 
      MetadataAddress = adfsMetadata, 

      Notifications = new WsFederationAuthenticationNotifications() 
      { 

       RedirectToIdentityProvider = context => 
       { 

        context.ProtocolMessage.Wreply = "https://localhost:44329/"; 
        return Task.FromResult(0); 
       } 
      }, 

     }); 


    app.UseStageMarker(PipelineStage.Authenticate); 

alors que puis-je faire ??

Répondre

1

après plusieurs heures, je résolu le problème dans Startup classe et public void Configuration(IAppBuilder app) méthode , nous devons ajouter les revendications des rôles à WsFederationAuthenticationOptions comme celui-ci

app.UseWsFederationAuthentication(new WsFederationAuthenticationOptions 
     { 
      Wtrealm = realm, 
      MetadataAddress = adfsMetadata, 

      Notifications = new WsFederationAuthenticationNotifications() 
      { 
       // this method will be invoked after login succes 
       SecurityTokenValidated = notification => 
       { 
        ClaimsIdentity identity = notification.AuthenticationTicket.Identity; 
        // here we can add claims and specify the type, in my case i want to add Role Claim 
        identity.AddClaim(new Claim(ClaimTypes.Role, "student")); 

        return Task.FromResult(0); 
       }, 
       RedirectToIdentityProvider = context => 
       { 

        context.ProtocolMessage.Wreply = "https://localhost:44329/"; 
        return Task.FromResult(0); 
       } 
      }, 

     });