У меня есть веб-приложение (Angular 7), которое использует MSAL Angular для аутентификации пользователей с помощью Azure AD и для получения маркеров доступа для доступа к моему веб-API (.NET 4.6). Оба приложения были зарегистрированы на портале Azure со следующими разрешениями, как описано здесь :
- Веб-приложение:
user_impersonation
для веб-API (делегировано)
- Веб-API:
User.Read; Mail.Send
для MS Graph (делегированный)
Теперь я бы хотел позвонить в Microsoft Graph из Web API, используя ADAL для .NET, чтобы получить данные от имени пользователя .
Следуя этой инструкции Я должен настроить consentScopes
и protectedResourceMap
, но, поскольку я использую AAD v1, я не могу использовать области с инкрементным согласием.
Как мне настроить мое веб-приложение для получения токена доступа для веб-API и MS Graph?
Я обнаружил , что можно получить токены для AAD v1.0 с помощью MSAL.js (и я могу общаться с моим веб-API), но я не знаю, как настроить это для от имени потока для связи Web API с MS Graph.
UPDATE
Вот код для запроса токена доступа из Web API:
string accessToken = null;
var userAssertion = new UserAssertion(
<userAccessToken>,
"urn:ietf:params:oauth:grant-type:jwt-bearer",
userName);
var authority = "https://login.microsoftonline.com/" + <tenant> + "/";
var clientCredencial = new ClientCredential(<clientId>, <clientSecret>);
var authContext = new AuthenticationContext(authority, null);
try
{
var authResult = await authContext.AcquireTokenAsync(
"https://graph.microsoft.com",
clientCredencial,
userAssertion);
accessToken = authResult.AccessToken;
}
catch (AdalServiceException ex) { throw; }
Веб-приложение добавляется как knownClientApplications в манифесте веб-API:
"knownClientApplications": [
"<WebAppAppId>"
],
Это области, установленные в веб-приложении (MsalModule):
consentScopes:
[
'https://webapi.example.com/user_impersonation'
],
В этом случае веб-приложение требует следующих разрешений на экране согласия:
- Доступ WebAPIName
- Доступ к вашим данным в любое время
- Просмотр вашего основного профиля
Если я пытаюсь получить токен доступа для MS Graph, я получаю сообщение об ошибке:
{"AADSTS65001: пользователь или администратор не дал согласие на использование приложения с идентификатором« WebApiClientId »с именем« WebApiAppName ». Отправьте интерактивный запрос на авторизацию для этого пользователя и ресурса.}