Авторизация на Azure Active Directory через веб-API - PullRequest
0 голосов
/ 15 января 2019

Я прочитал много документов, но, возможно, что-то пропустил. Я хочу передать имя пользователя и пароль в Web API, получить токен в ответ и использовать его для доступа к другим защищенным частям Web API (неинтерактивная авторизация)

Я обнаружил, что это можно делать только с нативными клиентами (настольные, мобильные приложения)

List<string> scopes = new List<string>()
{
    "https://mydomain.onmicrosoft.com/myapp/access-as_user"
};
string clientId = _azureAdOptions.Value.ClientId;
string aadInstance = "https://login.microsoftonline.com/{0}/v2.0";
string tanent = "organizations";
string authority = String.Format(CultureInfo.InvariantCulture, aadInstance, tanent);

var secureStringPass = new NetworkCredential("", pass).SecurePassword;
PublicClientApplication _app = new PublicClientApplication(clientId, authority);
var result = await _app.AcquireTokenByUsernamePasswordAsync(scopes, usr, secureStringPass);

Приведенный выше код работает в natove clieant, но когда я перемещаю его в приложение WebAPI, оно дает мне

MsalServiceException: AADSTS70002: тело запроса должно содержать следующий параметр: 'client_secret или client_assertion'

Разве невозможно получить токен формы web api таким образом?

1 Ответ

0 голосов
/ 15 января 2019

Как сказал @juunas, мы обычно используем поток владельцев ресурсов только из собственного клиента, который защищен Azure AD. Конфиденциальный клиент, такой как веб-сайт, не может использовать прямые учетные данные пользователя.

Пожалуйста, обратитесь к этой статье для получения дополнительной информации о том, как использовать ADAL .NET для аутентификации пользователей с помощью имени пользователя / пароля. Особенно в разделе Constraints & Limitations.

В сценарии SPA вы можете использовать библиотеку аутентификации Azure AD (ADAL) для аутентификации пользователя и получения токена доступа для доступа к вашему веб-API в Azure AD V1.0. Пожалуйста, нажмите здесь для примера кода.

Если вы используете конечную точку Azure AD v2.0, вам следует использовать Microsoft Authentication Library (MSAL). Пожалуйста, нажмите здесь для примера кода.

...