Autorisation à l’aide d’un compte Windows

Dans mon Windows Store App (c #), j’ai mon propre mécanisme d’autorisation:

  1. L’utilisateur a dépassé son nom d’utilisateur / mot de passe et l’a envoyé au serveur.
  2. Le serveur génère un jeton unique et le renvoie à l’utilisateur.
  3. Pour toutes les requêtes suivantes, l’utilisateur a utilisé ce jeton.

Maintenant, j’essaye de faire une autorisation en utilisant uniquement un compte Windows.
MSDN fournit la UserInformation class et je peux obtenir le name for the user account ou domain name for the user . Mais je pense que cela ne suffit pas pour mon régime d’autorisation.

Aussi, la méthode GetSessionInitiationProtocolUriAsync semble très intéressante, mais je ne sais pas comment utiliser correctement ces Uri pour obtenir une autorisation.

Comment puis-je utiliser le compte Windows pour obtenir une autorisation dans mon application?
note: je suis intéressé par les deux situations: quand l’utilisateur dans le domaine ou non.

Merci.

Il y en avait beaucoup à implémenter, mais si vous voulez restr simple et posséder le processus, vous pouvez implémenter votre propre méthode d’authentification. Une fois l’authentification réussie, vous pouvez créer une valeur de hachage à partir de son mot de passe et de son sel secret. en tant que cookie etc. que vous utilisez pour valider chaque demande par la suite.

En ce qui concerne l’autorisation, vous pouvez implémenter votre propre fournisseur ou utiliser un fournisseur basé sur un rôle lié au groupe d’ ordinateurs ou au répertoire actif local en utilisant les classes ci-dessous ou en utilisant simplement les anciens RoleProviders .

Vous pouvez implémenter votre propre méthode d’authentification en utilisant la méthode décrite ci-dessous ou en utilisant le fournisseur d’ authentification et d’autorisation pour ASP.Net (si votre serveur s’exécute sur .net). Fondamentalement, l’ adhésion à Asp.Net et les fournisseurs de rôle . Cependant, la méthode détaillée ci-dessous vous permettra d’accéder et de modifier les rôles et d’autres informations sur l’utilisateur.

Dans .Net 3.5+, il y a un nouvel espace de noms appelé System.DirectoryServices.AccountManagement .

Extrait de MSDN

L’espace de noms System.DirectoryServices.AccountManagement offre un access et une manipulation uniformes des entités de sécurité des utilisateurs, des ordinateurs et des groupes dans les différents magasins principaux: services de domaine Active Directory (AD DS), services AD LDS et machine SAM ( MSAM).

System.DirectoryServices.AccountManagement gère les objects de répertoire indépendamment de l’espace de noms System.DirectoryServices. Les applications de services d’annuaire gérées peuvent tirer parti de l’API AccountManagement pour simplifier la gestion des principaux utilisateurs, ordinateurs et groupes. Les solutions qui nécessitaient auparavant une connaissance complexe du magasin ou du code long, telles que la recherche de tous les groupes auxquels un utilisateur appartient, sont exécutées en quelques lignes de code avec l’API AccountManagement.

Vous pouvez facilement authentifier un identifiant utilisateur sur AD en utilisant le code ci-dessous:

  bool valid = false; using (PrincipalContext context = new PrincipalContext(ContextType.Domain)) { valid = context.ValidateCredentials( username, password ); } 

Si vous souhaitez valider à l’aide d’un compte d’ordinateur local, vous pouvez également modifier le constructeur:

 new PrincipalContext(ContextType.Machine) 

Vous pouvez consulter la documentation pour d’autres options et cela vous permettra en outre d’obtenir toutes sortes d’informations du magasin, comme l’adhésion, etc.

Le nouvel espace de noms était la tentative de Microsoft de simplifier DirectoryServices qui, à mon avis, a été un succès, mais si vous voulez encore plus de contrôle, vous pouvez utiliser les classes DirectoryServices, mais cela augmenterait la complexité de la solution.

J’espère que cela vous aidera si vous avez besoin d’informations supplémentaires ou si vous pensez que ce n’est pas tout à fait ce que vous cherchez, faites-le moi savoir, je m’efforcerai d’améliorer la réponse.

Premièrement, je crains que vous ne confondiez authentification et autorisation.
Authentification – prouver l’identité d’un utilisateur (comme si je présentais une pièce d’identité lorsque je me rendais à la banque)
Autorisation – décider si une identité est autorisée à effectuer certaines actions (comme si le client “Nitz” pouvait drainer le compte n ° 44422).

Un compte Microsoft ne peut vous fournir qu’une authentification – le client utilisera un système pour prouver à votre serveur qu’il appartient à [email protected] , et il vous appartient de décider s’il est autorisé à faire des choses dans votre application (autorisation ).
Avec les comptes de domaine, vous pouvez utiliser l’appartenance à un groupe de domaines pour vous aider avec votre autorisation (elle est même courante dans les applications Windows Server), que vous obtenez généralement “gratuitement” avec le jeton d’authentification de l’utilisateur.

En supposant que je vous ai bien compris et que vous recherchez effectivement une authentification, vous devez fournir deux comportements: un pour l’utilisation de l’authentification du domaine et l’autre pour l’authentification du compte Microsoft. C’est parce que les bibliothèques et les protocoles de communication sont très différents entre les deux.

Fournir une authentification

À l’aide de ce didacticiel destiné aux gars de Microsoft Azure, vous pouvez configurer un exemple de combinaison application / site Web utilisant l’authentification du compte Microsoft.

Pour utiliser l’authentification de domaine (Kerberos / NTLM), vous pouvez suivre ce post et activer simplement “l’authentification Windows intégrée” dans votre site Web / service (je suppose que c’est IIS). Si vous êtes novice en matière d’authentification, je dirai bientôt que, une fois correctement configurée (pas de décalage horaire, de problèmes AD, etc.), l’authentification est transparente. S’il y a des problèmes, revenez à un simple site Web “hello world” et testez-le à partir d’Internet Explorer.

Pour chaque scénario, il est préférable de créer une méthode “hello world” renvoyant les informations d’authentification de l’utilisateur pour vous assurer que vous avez bien compris.

Fournir une autorisation

avec chaque méthode d’authentification, vous obtenez un identifiant unique (compte Microsoft: UserId . Comptes de domaine: SID ). Votre logique doit traduire ces informations en un ensemble d’permissions – par exemple, gérer une table portant l’ID dans une colonne et isAdmin dans une autre. Votre application doit consulter cette logique lorsqu’elle décide d’autoriser ou de refuser une action d’un client.

Combiner entreprise et public

Comme les méthodes d’authentification des utilisateurs publics sont différentes de celles utilisées pour les utilisateurs d’entreprise, vous obtiendrez probablement des identifiants différents pour le même utilisateur lorsqu’ils sont connectés à partir de différentes méthodes (par exemple DOMAIN\bla et [email protected] ). Si vous envisagez de fournir les deux méthodes d’authentification en même temps, vous devez en tenir compte (par exemple, en créant une table “utilisateur” comportant une colonne pour les ID de compte Microsoft et une autre pour les SID de domaine). Il est généralement inutile de fournir les deux méthodes d’authentification en même temps, mais c’est votre application.

J’espère que j’ai aidé!

Une fois que j’ai eu la même situation, (une application client doit se connecter au serveur avec peu d’identifiants d’identité. Après l’authentification personnalisée, un jeton sera accordé au client avec peu de revendications, chaque requête client sera validée par rapport au jeton donné) , si vous êtes dans quelque chose comme ça, considérez ce lien, cela m’a aidé à résoudre le problème.

http://bitoftech.net/2014/06/09/angularjs-token-authentication-using-asp-net-web-api-2-owin-asp-net-identity/

Remarque: vous pouvez implémenter une authentification et une autorisation personnalisées en étendant respectivement claimsAuthenticationManager et Claimsauthorizationmanager