Неверное имя пользователя или пароль при получении токена доступа в Azure - PullRequest
0 голосов
/ 16 октября 2018

Вот мой код для получения токена доступа:

HttpClient clie = new HttpClient();
    string tokenEndpoint = "https://login.microsoftonline.com/{directoryID}/oauth2/token";
    var body = "resource=https://analysis.windows.net/powerbi/api&client_id=clientID&grant_type=password&username=myADusername&password=myADpassword";
   var stringContent = new StringContent(body, Encoding.UTF8, "application/x-www-form-urlencoded");

 var result = await clie.PostAsync(tokenEndpoint, stringContent).ContinueWith<string>((response) =>
                {
                    return response.Result.Content.ReadAsStringAsync().Result;
                });

                JObject jobject = JObject.Parse(result);

                var token = jobject["access_token"].Value<string>();

Я использую свое имя пользователя и пароль Azure AD для получения токена.Я использовал те же учетные данные в моем приложении MVC var credential = new UserPasswordCredential(Username,Password);, которое отлично работает.Но в этом приложении .NET core 2.0 выдает ошибку, в которой говорится о недействительном гранте.Неправильное имя пользователя или пароль.Это те же учетные данные, которые я использовал для получения токена, тип предоставления установлен на пароль.Что не так с тем, что я делаю?

1 Ответ

0 голосов
/ 19 октября 2018

На основании моего теста демо-код работает для меня.Если возможно, попробуйте создать нового пользователя в Azure AD и использовать созданного пользователя для его повторной проверки.Формат имени пользователя: username@xxx.xxx

HttpClient clie = new HttpClient();
string tokenEndpoint = "https://login.microsoftonline.com/{tenantId}/oauth2/token";
var body = "resource=https://analysis.windows.net/powerbi/api&client_id={nativeAppClientId}&grant_type=password&username=username@xxxx.onmicrosoft.com&password=password";
var stringContent = new StringContent(body, Encoding.UTF8, "application/x-www-form-urlencoded");
string result =  clie.PostAsync(tokenEndpoint, stringContent).ContinueWith((response) =>
            {
                return response.Result.Content.ReadAsStringAsync().Result;
            }).Result;

Результат теста:

enter image description here

...