J'ai créé une application Azure AAD de type webapp qui a le secret client et l'URL de redirection. Maintenant, je veux obtenir un jeton d'accès au nom de l'utilisateur en utilisant l'application AAD. En regardant la documentation, j'ai obtenu le code suivant jusqu'à présent.Comment obtenir un jeton On-Be-Of-User dans .NET en utilisant ADAL
static void Main(string[] args)
{
var clientId = "<REDACTED>";
var clientSecret = "<REDACTED>";
var resourceAppIdURI = "https://api.office.com/discovery/";
var authority = "https://login.microsoftonline.com/common";
AuthenticationContext ac = new AuthenticationContext(authority, new FileCache());
ClientCredential cc = new ClientCredential(clientId, clientSecret);
// Get token as application
var task = ac.AcquireTokenAsync(resourceAppIdURI, cc);
task.Wait();
var appToken = task.Result.AccessToken;
// Get tokenn on behalf of user
UserCredential uc = new UserCredential("[email protected]");
task = ac.AcquireTokenAsync(resourceAppIdURI, clientId, uc);
var userToken = task.Result.AccessToken;
Console.ReadLine();
}
Mais c'est l'erreur que j'obtiens lorsque j'essaie d'obtenir un jeton utilisateur comme suit.
message « AADSTS70002: Le corps de la requête doit contenir le paramètre suivant:. 'Client_secret ou client_assertion \ r \ nTrace ID: 0e977f67-d5cb-4cf5-8fea-bac04b6d0400 \ r \ nCorrelation ID: 824a96bf -8007-4879-970c-2680644b8669 \ r \ nTimestamp: 21/07/2017 05: 02: 41Z » string
Pourquoi ai-je cette erreur et comment y remédier? Dois-je d'abord me connecter avec l'utilisateur, puis utiliser UserAssertion? Il existe des tonnes de méthodes surchargées pour la méthode AcquireTokenAsync, mais je ne sais pas exactement ce que je devrais utiliser.
J'ai aussi regardé cette url github pour voir comment ils le font https://github.com/Azure-Samples/active-directory-dotnet-webapi-onbehalfof/blob/8afb3e6a648d8e7246685bf6747d009006c761b8/TodoListService/Controllers/TodoListController.cs
Ceci est le code approprié pour obtenir jeton utilisateur connecté
ClientCredential clientCred = new ClientCredential(clientId, appKey);
var bootstrapContext = ClaimsPrincipal.Current.Identities.First().BootstrapContext as System.IdentityModel.Tokens.BootstrapContext;
string userName = ClaimsPrincipal.Current.FindFirst(ClaimTypes.Upn) != null ? ClaimsPrincipal.Current.FindFirst(ClaimTypes.Upn).Value : ClaimsPrincipal.Current.FindFirst(ClaimTypes.Email).Value;
string userAccessToken = bootstrapContext.Token;
UserAssertion userAssertion = new UserAssertion(bootstrapContext.Token, "urn:ietf:params:oauth:grant-type:jwt-bearer", userName);
string authority = String.Format(CultureInfo.InvariantCulture, aadInstance, tenant);
string userId = ClaimsPrincipal.Current.FindFirst(ClaimTypes.NameIdentifier).Value;
AuthenticationContext authContext = new AuthenticationContext(authority, new DbTokenCache(userId));
Ici, ils ont déjà connecté utilisateur et en créant une UserAssertion à partir du jeton de cet utilisateur connecté. Dans mon application de console, l'utilisateur ne s'est pas encore connecté. J'ai donc besoin d'un moyen de le faire dans mon application de console. Comment puis-je montrer la page de connexion AAD à l'utilisateur en tant que pop-up, puis une fois que l'utilisateur entre dans Creds utiliser cette information pour créer un objet UserAssertion?
grâce
Je ne veux vraiment pas utiliser une autre application aad (client natif) pour obtenir au nom du jeton de l'utilisateur. Lorsque j'essaie d'obtenir un jeton d'accès à l'aide de l'application posman, et que j'apporte les informations d'identification de l'application webapp, il obtient le nom de l'utilisateur. Alors, comment puis-je faire la même chose dans mon application de console? – user330612
Si vos besoins sont dans l'application console, affichez la page de connexion AAD à l'utilisateur sous forme de pop-up, et obtenez le jeton d'accès au nom de l'utilisateur, puis vous devez enregistrer une application native dans AAD. Quel est votre scénario? –
Je vois. Si j'utilise PowerShell à la place de l'application Console, puis-je utiliser les mêmes informations d'identification Web App pour me connecter avec l'utilisateur qui affiche une fenêtre contextuelle ou a-t-il également besoin d'une application native. Mon scénario est que je n'ai qu'une seule application web créée et que je n'ai pas accès à aad pour créer plus d'applications et je veux tester certaines API qui nécessitent d'utiliser au nom du jeton d'accès utilisateur.L'application de la console n'est pas la bonne approche alors laissez-moi savoir quoi d'autre je peux utiliser pour tester les réponses api étant donné que je n'ai qu'une seule application web – user330612