Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Применяется к:
Клиенты рабочей силы (дополнительные сведения)
После создания конфиденциального клиентского приложения можно получить для него токен, вызвав AcquireTokenForClient, передав область и при необходимости обновив токен.
Области запроса
Область запросов для потока учетных данных клиента — это имя ресурса с добавлением /.default. Эта нотация сообщает идентификатору Microsoft Entra использовать разрешения на уровне приложения, объявленные статически во время регистрации приложения. Кроме того, эти разрешения API должны быть предоставлены администратором арендатора.
Ниже приведен пример определения областей веб-API в рамках конфигурации в файле appsettings.json. Этот пример взят из примера кода управляющей программы консоли .NET на GitHub.
{
"AzureAd": {
// Same AzureAd section as before.
},
"MyWebApi": {
"BaseUrl": "https://localhost:44372/",
"RelativePath": "api/TodoList",
"RequestAppToken": true,
"Scopes": [ "[Enter here the scopes for your web API]" ]
}
}
Ресурсы Azure Active Directory (v1.0)
Область, используемая для учетных данных клиента, всегда должна содержать ID ресурса, за которым следует /.default.
Внимание
Когда MSAL запрашивает токен доступа для ресурса, который принимает токен доступа версии 1.0, Microsoft Entra ID извлекает нужную аудиторию из запрашиваемых прав доступа, принимая все до последней косой черты и используя это в качестве идентификатора ресурса.
Таким образом, если, например, база данных Azure SQL (https://database.windows.net), ресурс ожидает, что его URL будет заканчиваться косой чертой (для базы данных Azure SQL https://database.windows.net/), необходимо запросить область https://database.windows.net//.default. (Обратите внимание на двойную косую черту.) См. также описание ошибки MSAL.NET № 747: Resource url's trailing slash is omitted, which caused sql auth failure.
AcquireTokenForClient API
Чтобы получить маркер для приложения, использовать AcquireTokenForClient или его эквивалент, в зависимости от платформы.
При использовании Microsoft.Identity.Web вам не нужно получать маркер. Вы можете использовать API более высокого уровня, как показано в вызове веб-API из демон-приложения. Если вы используете пакет SDK, для которого требуется маркер, в следующем фрагменте кода показано, как получить этот маркер.
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Identity.Abstractions;
using Microsoft.Identity.Web;
// In the Program.cs, acquire a token for your downstream API
var tokenAcquirerFactory = TokenAcquirerFactory.GetDefaultInstance();
ITokenAcquirer acquirer = tokenAcquirerFactory.GetTokenAcquirer();
AcquireTokenResult tokenResult = await acquirer.GetTokenForUserAsync(new[] { "https://graph.microsoft.com/.default" });
string accessToken = tokenResult.AccessToken;
Протокол
Если у вас еще нет библиотеки для выбранного языка, вы можете использовать протокол напрямую.
Первый сценарий: доступ к запросу токена с помощью общего секрета
POST /{tenant}/oauth2/v2.0/token HTTP/1.1 //Line breaks for clarity.
Host: login.microsoftonline.com
Content-Type: application/x-www-form-urlencoded
client_id=00001111-aaaa-2222-bbbb-3333cccc4444
&scope=https%3A%2F%2Fgraph.microsoft.com%2F.default
&client_secret=A1b-C2d_E3f.H4i,J5k?L6m!N7o-P8q_R9s.T0u
&grant_type=client_credentials
Второй сценарий: доступ к запросу токена с помощью сертификата
POST /{tenant}/oauth2/v2.0/token HTTP/1.1 // Line breaks for clarity.
Host: login.microsoftonline.com
Content-Type: application/x-www-form-urlencoded
scope=https%3A%2F%2Fgraph.microsoft.com%2F.default
&client_id=11112222-bbbb-3333-cccc-4444dddd5555
&client_assertion_type=urn%3Aietf%3Aparams%3Aoauth%3Aclient-assertion-type%3Ajwt-bearer
&client_assertion=aaaaaaaa-0b0b-...
&grant_type=client_credentials
Дополнительные сведения см. в документации к протоколу: платформа удостоверений Майкрософт и поток учетных данных клиента OAuth 2.0.
Устранение неполадок
Вы использовали область resource/.default?
Если появляется сообщение об ошибке, указывающее на недопустимую область, вероятно, вы не использовали область resource/.default.
Не забыли предоставить согласие администратора? Демон-приложениям это необходимо!
Если при вызове API возникал ошибка Недостаточно привилегий для выполнения операции, администратор клиента должен предоставить приложению разрешения.
Если вы не предоставляете согласие администратора приложению, возникает следующая ошибка:
Failed to call the web API: Forbidden
Content: {
"error": {
"code": "Authorization_RequestDenied",
"message": "Insufficient privileges to complete the operation.",
"innerError": {
"request-id": "<guid>",
"date": "<date>"
}
}
}
Выберите один из следующих параметров в зависимости от роли.
Администратор облачных приложений
Для администратора облачных приложений перейдите в корпоративные приложения в Центре администрирования Microsoft Entra. Выберите регистрацию приложения и выберите разрешения в разделе "Безопасность " в левой области. Затем выберите большую кнопку с надписью Предоставить административное согласие для {Tenant Name} (где {Tenant Name} — это имя каталога).
Обычный пользователь
Для стандартного пользователя клиента попросите администратора облачных приложений предоставить согласие администратора приложению. Для этого укажите следующий URL-адрес администратора:
https://login.microsoftonline.com/Enter_the_Tenant_Id_Here/adminconsent?client_id=Enter_the_Application_Id_Here
В URL-адресе:
- Замените
Enter_the_Tenant_Id_Hereидентификатором или именем клиента (например,contoso.microsoft.com). -
Enter_the_Application_Id_Here— это идентификатор приложения (клиента) для зарегистрированного приложения.
Ошибка AADSTS50011: No reply address is registered for the application может отображаться после предоставления согласия приложению с помощью предыдущего URL-адреса. Эта ошибка возникает, так как приложение и URL-адрес не имеют URI перенаправления. Это сообщение можно проигнорировать.
Вы вызываете собственный API?
Если управляющая программа вызывает собственный веб-API и вам не удалось добавить разрешение на регистрацию приложения управляющей программы, необходимо добавить роли приложения в регистрацию приложения веб-API.
Следующие шаги
Перейдите к следующей статье в этом сценарии, Вызов веб-API.