web-dev-qa-db-fra.com

ex = {"AADSTS70002: Le corps de la demande doit contenir le paramètre suivant: 'client_secret or client_assertion'

Voici comment j'ai écrit du code et essayé d'obtenir la sortie.

Le corps de la demande doit contenir le paramètre suivant: client_secret ou client_assertion

 static async Task<AuthenticationResult> getAccessToken()
 {
     string hardcodedUsername = "";
     string hardcodedPassword = "";
     string tenantName = "projectwidgets.com";
     string authString = "https://login.microsoftonline.com/" + tenantName;
     AuthenticationContext authenticationContext = new AuthenticationContext(authString, false);
     //Config for OAuth client credentials
     string clientId = "as";
     string key = "kk";
     string authority = String.Format(CultureInfo.InvariantCulture, aadInstance, tenantName);
     var authContext = new AuthenticationContext(authority);
     AuthenticationResult result = null;
     try
     {
         result = await authContext.AcquireTokenAsync("https://pwsnapitazure.azurewebsites.net", clientId, new UserPasswordCredential(hardcodedUsername, hardcodedPassword));
     }
     catch (Exception ex)
     {
          Console.WriteLine(ex.StackTrace);
          System.Diagnostics.Debug.WriteLine(ex.Message);
     }                        
     return result;
 }
8
ravi rathod

Selon votre code, il semble que vous utilisez une application Web/API qui utilise un nom d'utilisateur et un mot de passe pour s'authentifier.

nous ne pouvons utiliser que le flux du propriétaire de la ressource à partir d'un client natif. Un client confidentiel, tel qu'un site Web, ne peut pas utiliser les informations d'identification utilisateur directes.

Vous devez l'invoquer en tant que client public (application cliente native), et non en tant que client confidentiel (application web/API). Veuillez vous référer à ce document pour en savoir plus sur la façon d'utiliser ADAL .NET pour authentifier les utilisateurs via un nom d'utilisateur/mot de passe. Surtout le Constraints & Limitations section .

Dans une application démon ou serveur, vous pouvez envisager d'utiliser flux d'informations d'identification client , mais avec ce flux, l'application présente ses informations d'identification client au point de terminaison d'émission de jeton OAuth2 et obtient en retour un jeton d'accès qui représente l'application. lui-même sans aucune information utilisateur. Veuillez cliquer sur ici pour plus de détails sur le flux d'informations d'identification du client, et ici sont des exemples de code.

7
Nan Yu

Comme l'interface utilisateur d'enregistrement d'application Azure est passée de l'héritage . Vous devez donc activer le paramètre d'ajout appelé

Type de client par défaut à Oui

enter image description here

Dans le manifeste , vous pouvez également contrôler

"allowPublicClient": true

J'espère que cela aide quelqu'un

4
Jayendran