3
votes

Obtenir l'utilisateur actuellement connecté avec le fournisseur d'authentification AAD

J'ai un site Web simple, hébergé sur Azure App Services, sur lequel j'ai activé l'authentification AAD en suivant le paramètre express comme recommandé here et cela fonctionne correctement.

Je voudrais maintenant afficher sur la barre de navigation le nom d'utilisateur / e-mail de l'utilisateur actuellement connecté. Comment dois-je faire?

L'application est développée en C # Asp.Net Core 1.0.4

Merci beaucoup


2 commentaires

Utilisez-vous une bibliothèque (d'assistance) (comme Microsoft.VisualStudio.Services.Client ) ou interagissez directement via HTTP?


Mais je pense que vous devrez examiner le résultat de l'authentification et vous souvenir de ces informations vous-même.


3 Réponses :


0
votes

Vous pouvez utiliser ClaimsPrincipal pour obtenir l'identité.

à partir du Guide Azure

 Claim displayName = ClaimsPrincipal.Current.FindFirst(ClaimsPrincipal.Current.Identities.First().NameClaimType);
ViewBag.DisplayName = displayName != null ? displayName.Value : string.Empty;


1 commentaires

Cela ne fonctionne pas dans mon cas (authentification et autorisation activées dans Azure App Service)



0
votes

Dans un simple site Web comme vous l'avez dit; assurez-vous que votre contrôleur hérite de Controller.

protected string userName => User?.Identity?.Name ?? "Unnamed User";  

Et puis utilisez simplement

[Authorize]
public class MyController : Controller

Ensuite, utilisez userName. Il renverra le nom de connexion / e-mail de l'utilisateur AD


1 commentaires

Cela ne fonctionne pas dans mon cas (authentification et autorisation activées dans Azure App Service)



2
votes

Vous utilisez Authentification et autorisation dans Azure App Service .

App Service transmet les revendications des utilisateurs à votre application en utilisant des en-têtes spéciaux. Les demandes externes ne sont pas autorisées à définir ces en-têtes, ils ne sont donc présents que s'ils sont définis par App Service. Voici quelques exemples d'en-têtes:

  • X-MS-CLIENT-PRINCIPAL-NAME
  • X-MS-CLIENT-PRINCIPAL-ID
  • X-MS-TOKEN-AAD-ID-TOKEN
  • X-MS-TOKEN-AAD-ACCESS-TOKEN

référence: https://docs.microsoft.com/en-us/azure/app-service/app-service-authentication-how-to#access-user-claims

Le code écrit dans n'importe quel langage ou framework peut obtenir les informations dont il a besoin à partir de ces en-têtes. Pour les applications ASP.NET 4.6, ClaimsPrincipal est automatiquement défini avec les valeurs appropriées.

Votre application peut également obtenir des détails supplémentaires sur l'utilisateur authentifié en appelant /.auth/me.

Mais il semble actuellement qu'ASP.NET Core ne prend pas en charge la circulation des informations d'identité d'un module IIS (comme Easy Auth) vers le code de l'application. Consultez la discussion ici.

Je n'ai pas testé cela ces jours-ci. Mais vous pouvez toujours obtenir le nom de l'utilisateur, les informations de jeton à partir des en-têtes ci-dessus. Si vous souhaitez obtenir plus de revendications d'utilisateurs, vous pouvez envoyer une requête côté serveur au point de terminaison intégré /.auth/me pour récupérer les revendications.

Vous pouvez écrire un middlerware personnalisé pour remplir la propriété User dans .net Core:

https://stackoverflow.com/a/42270669/5751404


2 commentaires

Que voulez-vous dire par "vous pouvez faire une requête côté serveur au point de terminaison intégré /.auth/me pour récupérer les revendications"?


@Giuly, faites directement une requête Http get à https: //yourAzureWebsiteUrl/.auth/me