#asp.net-core #microsoft-graph-api #asp.net-identity #microsoft-graph-sdks #microsoft-identity-platform
#asp.net-core #microsoft-graph-api #asp.net-identity #microsoft-graph-sdks #microsoft-identity-platform
Вопрос:
Это компилируется в startup.cs
:
string[] initialScopes = Configuration.GetValue<string>("GraphApi:Scopes")?.Split(' ');
services.AddMicrosoftIdentityWebAppAuthentication(Configuration)
.EnableTokenAcquisitionToCallDownstreamApi(initialScopes)
.AddMicrosoftGraph();
Однако, поскольку я работаю только с контроллером API, а не с веб-приложением, я хочу сделать это вместо этого:
string[] initialScopes = Configuration.GetValue<string>("GraphApi:Scopes")?.Split(' ');
services.AddMicrosoftIdentityWebApiAuthentication(Configuration)
.EnableTokenAcquisitionToCallDownstreamApi(initialScopes)
.AddMicrosoftGraph();
Однако это не компилируется. По крайней мере, не с Microsoft.Identity.Web
версией v1.0. Intellisense говорит мне об этом string[] is not assignable to parameter type ConfidentialClientApplicationOptions
.
Разница в том, что AddMicrosoftIdentityWebApiAuthentication
возвращает a MicrosoftIdentityWebApiAuthenticationBuilder
, тогда как первый возвращает `MicrosoftIdentityAppCallsWebApiAuthenticationBuilder.
Есть ли здесь обходной путь?
Чего я пытаюсь добиться, так это убедиться, что область установлена правильно при запросе токена доступа к графу. В настоящее время, похоже, это не так, поскольку я получаю такую ошибку при попытке вызвать график — например await graphServiceClient.Applications.Request().GetAsync();
.
---> Microsoft.Identity.Web.MicrosoftIdentityWebChallengeUserException: IDW10502: An MsalUiRequiredException was thrown due to a challenge for the user. See https://aka.ms/ms-id-web/ca_incremental-consent.
---> MSAL.NetCore.4.18.0.0.MsalUiRequiredException:
ErrorCode: user_null
Microsoft.Identity.Client.MsalUiRequiredException: No account or login hint was
Другими словами, мне нужен токен доступа к приложению, который выглядит следующим образом:
[...more json]
{
"aud": "https://graph.microsoft.com",
"iss": "https://sts.windows.net/{tenant id}/",
"iat": 1602055659,
"nbf": 1602055659,
"exp": 1602059559,
"aio": "[...]",
"app_displayname": "My app",
"appid": "{App id guid}",
"appidacr": "1",
"idp": "https://sts.windows.net/{tenant id}/",
"idtyp": "app",
"oid": "{guid}",
"rh": "[...]",
"roles": [
"Application.ReadWrite.All",
"Directory.ReadWrite.All",
"Directory.Read.All",
"Application.Read.All"
],
"sub": "{guid}",
"tenant_region_scope": "EU",
"tid": "{tenant id}",
"uti": "[...]",
"ver": "1.0",
"xms_tcdt": 1597308440
}.[Signature]
Я могу сгенерировать вышеуказанное вручную с помощью Postman, и если я использую его, он работает. Подтверждение правильности конфигурации приложения в Azure AD.
Ответ №1:
По-видимому, использование токена доступа к приложению в настоящее время еще не поддерживается.
IDW10502: исключение MsalUiRequiredException было вызвано из-за проблемы для пользователя #667
Ответ №2:
использовать
.AddMicrosoftGraph(Configuration.GetSection("GraphAPI"))
и убедитесь, что ваш appsettings.json содержит следующее (используйте область, которую вы хотите разделить пробелом):
"GraphAPI": {
"BaseUrl": "https://graph.microsoft.com/v1.0",
"Scopes": "user.read mail.read",
"DefaultScope": "https://graph.microsoft.com/.default"
}