2017-09-19 3 views
1

J'ai créé une application Web dans Azure. J'ai l'authentification basée sur le AzureAD ...Récupération des rôles Azure dans l'application Web

En fait tous les utilisateurs ont les mêmes droits ... J'ai besoin d'un groupe d'administrateurs et le reste du monde.

Je vois que dans le portail Azure pour mon application web il y a un Acces control (IAM) où certains rôles sont répertoriés ... enter image description here Puis-je utiliser ces rôles dans ma demande?

Que fait je à mon avis est:

var isAdmin = User.HasClaim("IsAdmin", true.ToString()); 

Si je comprends bien nommé « les réclamations fondées » authentification, mais je voudrais essayer d'utiliser le rôle authentification basée sur ...

J'ai essayé aussi de faire

var userIdentity = (System.Security.Claims.ClaimsIdentity)User.Identity; 
var claims = userIdentity.Claims; 
var roleClaimType = userIdentity.RoleClaimType; 
var roles = claims.Where(c => c.Type == System.Security.Claims.ClaimTypes.Role).ToList(); 

mais que la liste des rôles est vide ...

Voici le code Startup.cs mon Autentication dans le public void Configure(IApplicationBuilder app,...

app.UseOpenIdConnectAuthentication(new OpenIdConnectOptions 
{ 
    ClientId = Configuration["Authentication:AzureAd:ClientId"], 
    Authority = Configuration["Authentication:AzureAd:AADInstance"] + Configuration["Authentication:AzureAd:TenantId"], 
    CallbackPath = Configuration["Authentication:AzureAd:CallbackPath"], 
    Events = new OpenIdConnectEvents 
    { 
     OnTicketReceived = async context => 
     { 
      var user = (ClaimsIdentity)context.Ticket.Principal.Identity; 
      if (user.IsAuthenticated) 
      { 
       var firstName = user.FindFirst(ClaimTypes.GivenName).Value; 
       var lastName = user.FindFirst(ClaimTypes.Surname).Value; 
       var email = user.HasClaim(cl => cl.Type == ClaimTypes.Email) ? user.FindFirst(ClaimTypes.Email).Value : user.Name; 
       var connectedOn = DateTime.UtcNow; 
       var userId = user.Name; 
       var myUser = await repository.GetAsync<Connection>(userId); 
       if (myUser == null) 
       { 
        myUser = new Connection(userId) 
        { 
         FirstName = firstName, 
         LastName = lastName, 
         Email = email 
        }; 
       } 
       myUser.LastConnectedOn = connectedOn; 
       List<Connection> myList = new List<Connection>() { myUser }; 
       var results = await repository.InsertOrMergeAsync(myList); 
       Claim clm = new Claim("IsAdmin", myUser.IsAdmin.ToString(), ClaimValueTypes.Boolean); 
       user.AddClaim(clm); 
      } 
      return; 
     } 
     }, 
    } 
}); 

Et aussi mon appsettings.json

"Authentication": { 
    "AzureAd": { 
    "AADInstance": "https://login.microsoftonline.com/", 
    "CallbackPath": "/signin-oidc", 
    "ClientId": "xxxxxxxx-xxxx-xxxx-xxxxx-xxxxxxxxxxxx", 
    "Domain": "mysite.azurewebsites.net", 
    "TenantId": "xxxxxxxx-xxxx-xxxx-xxxxx-xxxxxxxxxxxx" 
    } 
} 

Répondre

1

Je crois que les rôles que vous avez observé dans le portail sont liés à l'administration de les applications Web, pas l'autorisation aux fonctionnalités qu'il expose. Pour utiliser les rôles par programmation, je vous suggère de consulter l'exemple suivant qui explique comment configurer les rôles dans l'application Azure AD correspondant au projet que vous avez déployé en tant qu'application Web. https://github.com/Azure-Samples/active-directory-dotnet-webapp-roleclaims

De cette façon, vous serez en mesure de protéger les pages (à partir du code dans le contrôleur) en utilisant les attributs: ``

[Authorize(Roles = "Admin, Observer, Writer, Approver")] 

Affichez https://github.com/Azure-Samples/active-directory-dotnet-webapp-roleclaims/blob/master/WebApp-RoleClaims-DotNet/Controllers/TasksController.cs#L17

Vous pouvez également tester pour les utilisateurs ayant rôles donnés: if (User.IsInRole("Admin") || User.IsInRole("Writer")) { ... }

+0

la question principale pour moi serait de savoir comment créer ces rôles ... l'utilisation de '$ approverRole = CreateAppRole -Nom "Approver" -Description "Les approbateurs ont la possibilité de changer l'état des tâches." 'Est un peu obscur ... – Serge

+0

dans l'exemple ci-dessus parle de Manifest et web.config Je n'ai pas de telles choses dans l'ASP.NET Application de base ... De plus, si j'ai bien compris, RoleManager a encore été implémenté pour le framework .Core ... Aussi j'utilise AzureTable Storage et non Sql/CoreFramework ... donc je ne peux pas prendre IdentityUser ... – Serge

+0

Le manifeste peut être trouvé dans le portail Azure. Trouvez Azure Active Directory -> Inscriptions d'applications -> Votre application -> Manifeste. – juunas