Концепция
То, как вы описываете свой поток, похоже, что вы используете токен, поступающий от клиента к веб-сервису напрямую для вызова Microsoft Graph API от имени пользователя.это было бы неправильно от имени потока.
Как только вы аутентифицировали клиента в веб-сервисе на основе входящего токена, веб-сервис должен получить новый токен специально для графа Microsoft от имени пользователя (используя первый токен).
Более подробное описание потока см. Здесь Поток Azure Active Directory v2.0 и OAuth 2.0 «от имени»
Пример кода
Взгляните на этот пример кода.Это очень близко к тому, что вы пытаетесь достичь.
Здесь приложение WPF сначала вызывает ASP.NET Core Web API, а API позже вызывает Microsoft Graph от имени пользователя.
ASP.NET Core 2.1 Web API вызывает Microsoft Graph, сам вызывается из приложения WPF с использованием Azure AD V2
Важные части, на которые следует обратить внимание из кода:
Посмотрите на TodoListController.cs, где API сначала получаетновый AccessToken от имени пользователя, передавая необходимые области, а затем использует этот новый токен для вызова Microsoft Graph API.
public async Task<string> CallGraphApiOnBehalfOfUser()
{
string[] scopes = { "user.read" };
// we use MSAL.NET to get a token to call the API On Behalf Of the current user
try
{
string accessToken = await _tokenAcquisition.GetAccessTokenOnBehalfOfUser(HttpContext, scopes);
dynamic me = await CallGraphApiOnBehalfOfUser(accessToken);
return me.userPrincipalName;
}