1

Я разрабатываю приложение с использованием Xamarin Forms. Я создал каталог на лазурном портале. Поскольку я вижу ссылки через Интернет, для проверки подлинности Active Directory используется страница входа в систему Microsoft.Тихий вход с использованием имени пользователя в Azure Active Directory в Xamarin

Я хочу создать собственную регистрационную форму и передать имя пользователя в активный каталог и пройти проверку подлинности.

Возможно ли передавать пользовательские учетные данные программно и аутентифицировать пользователя? Как я могу передать учетные данные пользователя?

Я попытался следующие, но я получил «(411) Длина требуется» исключение

  var request = WebRequest.Create(string.Format(@"https://login.microsoftonline.com/{0}/oauth2/token?client_id=5e811f4f-4fa4-451e-a439-ca05cabc02d7&grant_type=password&[email protected]&password=userpassword&scope=openid", tenant)); 
      request.ContentType = "application/x-www-form-urlencoded"; 
      request.Method = "POST"; 
      using (HttpWebResponse response = await request.GetResponseAsync() as HttpWebResponse) 
      { 
       if (response.StatusCode != HttpStatusCode.OK) 
        Debug.WriteLine("Error fetching data. Server returned status code: {0}", response.StatusCode); 
       using (StreamReader reader = new StreamReader(response.GetResponseStream())) 
       { 
        var content = reader.ReadToEnd(); 
        if (string.IsNullOrWhiteSpace(content)) 
        { 
         Debug.WriteLine("Response contained empty body..."); 
        } 
        else { 
         Debug.WriteLine("Response Body: \r\n {0}", content); 
        } 
       } 
      } 

Мое имя пользователя мой электронный идентификатор. Правильно ли это имя пользователя? Поскольку сейчас я получаю ошибку с неправильным запросом. Чего не хватает?

AAD User Name

+0

аутентификации Большинство OAuth2 основе (в настоящее время) требуют/исполнение, что вы используете их OAuth процесс входа в систему, чтобы получить, что золотой доступ и токен обновления. Microsoft, Google, Facebook, и т. Д. Системы OAuth2 теперь основаны на этом факте безопасности. Огромный потенциал - если пользователь входит в систему через ваш сайт, а ваше приложение использует Android Chrome 'CustomTabs' или iOS' SFSafariViewController' для UI/OAuth/процесса OAuth, то ваш пользователь не должен снова входить в систему и наоборот. – SushiHangover

+0

Спасибо за ответ. Но я хочу, чтобы аутентифицировать активный каталог молча любым способом. Это возможно в любом случае? Просто хочу передать электронную почту пользователя и пароль. – Atul

+0

Технически вы можете, конечно, справиться с этим полным клиентским процессом OAuth2, так как вам нужно получить токен доступа, чтобы иметь возможность делать что-либо с API-интерфейсом Graph/AD Rest, но я настоятельно рекомендую вам не сходить с путь ... Просмотрите документы MS для «Протокола потока» и «поток аутентификации», это также означает, что вы ошибочно регистрируете свое «приложение» в качестве демона/сервера: https://docs.microsoft.com/en- us/azure/active-directory/develop/active-directory-authentication-scenarios – SushiHangover

ответ

3

Технически вы можете использовать имя пользователя и пароль потока, который описан более подробно here with ADAL.

Однако вам нужно вернуться к своему сценарию и понять, действительно ли он выполняет то, для чего предназначена платформа Azure Active Directory.

Пользователи используют аутентификацию на основе OAuth2, чтобы обеспечить безопасность и безопасность только для того, чтобы делиться своими паролями с надежными поставщиками удостоверений, такими как MS, FB, Google и т. Д. В общем, человек, заботящийся о безопасности, не захочет вводить пароль на ваш случайный веб-сайт и надейтесь, что вы не злоупотребляете этой информацией. Если вы хотите использовать AAD, вы также должны использовать наш опыт входа в систему, поскольку это действительно то, что клиент оплачивает на нашем сервисе во многих отношениях.

EDIT: Если ADAL больше не поддерживает этот поток, вы можете просто генерировать HTTP-запросы себя:

POST: https://login.microsoftonline.com/xxxxx.onmicrosoft.com/oauth2/token 

Content-Type: application/x-www-form-urlencoded 
resource={resource}&client_id={clientId}&grant_type=password&username={userName}&password={password}&scope=openid&client_secret={clientSecret} 
+0

Я уже прошел данную ссылку. Теперь метод AquireToken не принимает учетные данные пользователя. Его старый пост. – Atul

+0

Я обновил свой ответ, включив в него необработанный HTTP-запрос POST, который будет выполнять одно и то же поведение. Обратите внимание, что здесь 'grant_type = password', что и дало возможность всем этим работать. –

+0

@Shwan спасибо за ссылку. Вы можете мне немного помочь? Я получаю «Удаленный сервер возвратил ошибку: (411) Требуемая длина» исключение из удаленного сервера. – Atul

Смежные вопросы