UserPasswordCredential .Net Standard - PullRequest
       27

UserPasswordCredential .Net Standard

0 голосов
/ 07 ноября 2018

Я хочу вызвать graph api, https://graph.windows.net, для этого я использую делегированное разрешение, как показано ниже для токена

UserPasswordCredential credentials = new UserPasswordCredential("username", "password");
AuthenticationContext authContext = new AuthenticationContext(string.Format("https://login.windows.net/{0}", "mytenant.onmicrosoft.com"));
var accessToken = authContext.AcquireTokenAsync("https://graph.windows.net", clientId, credentials).Result.AccessToken;

Я не являюсь администратором клиента и в AAD не могу добавить определенные приложения в качестве владельца для проверки подлинности приложения. Это работало в полном объеме .net Есть ли обходной путь для этого в стандарте .net? Как я не могу использовать аутентификацию приложения в этом сценарии.

Я пытаюсь преобразовать веб-работу в функцию Azure.

1 Ответ

0 голосов
/ 15 ноября 2018

Есть ли обходной путь для этого в стандарте .net?

Да, мы могли бы использовать API остальных для прямого получения токена.

Post  https://login.windows.net/<tenant-id>/oauth2/token
Content-Type: application/x-www-form-urlencoded
grant_type=password
&resource={resource}
&username={username}
&password={password}
&client_id={client-id}

Ниже приведен демонстрационный код для получения токена доступа

var tenantId = "xxx.onmicrosoft.com";
var userName = "xxx@xxxx.onmicrosoft.com";
var password = "xxxxxx";
var clientId = "xxxxxxx";
using (HttpClient client = new HttpClient())
            {
                var tokenEndpoint = $"https://login.windows.net/{tenantId}/oauth2/token";
                var accept = "application/json";

                client.DefaultRequestHeaders.Add("Accept", accept);
                string postBody = $"resource=https://graph.windows.net/&client_id={clientId}&grant_type=password&username={userName}&password={password}";
                using (HttpResponseMessage response = await client.PostAsync(tokenEndpoint, new StringContent(postBody, Encoding.UTF8, "application/x-www-form-urlencoded")))
                {
                    if (response.IsSuccessStatusCode)
                    {
                        var jsonresult = JObject.Parse(await response.Content.ReadAsStringAsync());
                        var  token = (string)jsonresult["access_token"];
                    }
                }
            }

Примечание: Azure AD собственный требуется приложение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...