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 ... 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"
}
}
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
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
Le manifeste peut être trouvé dans le portail Azure. Trouvez Azure Active Directory -> Inscriptions d'applications -> Votre application -> Manifeste. – juunas