Microsoft Graph - ASP.NET 核心 - 权限不足

Microsoft Graph - ASP.NET Core - Insufficient privileges

我有一个可用的 ASP.NET 核心多租户 ADAL 网络应用程序。我正在集成 Microsoft Graph,但是当我尝试在 Microsoft.Graph.GraphServiceClient(例如 var me = await graphClient.Me.Request().GetAsync();)上使用方法时,出现以下错误:

Authorization_RequestDenied: Insufficient privileges to complete the operation.

我能够正确获取访问令牌。如果我将令牌从运行时复制粘贴到 Postman,它工作正常:

但出于同样的原因,它会在 ASP.NET 核心中引发错误。

问题是,我在第一个成功的令牌之后第二次(严重地)请求令牌,而不是仅仅从 TokenCache 中读取它。

解决方法:

在登录时从授权代码获取令牌并将其存储在缓存中:

public async Task<AuthenticationResult> GetTokenByAuthorizationCodeAsync(string userId, string code)
{
    TokenCache userTokenCache = new SessionTokenCache(userId, _memoryCache).GetCacheInstance();

    try
    {
        AuthenticationContext authContext = new AuthenticationContext(_aadInstance, userTokenCache);
        ClientCredential credential = new ClientCredential(_appId, _appSecret);
        AuthenticationResult result = await authContext.AcquireTokenByAuthorizationCodeAsync(code, new Uri(_redirectUri), credential, _graphResourceId);

        return result;
    }
    catch (Exception)
    {
        return null;
    }
}

并且在请求 GraphServiceClient 时,我刚刚从缓存中读取了正确的令牌:

public async Task<string> GetUserAccessTokenAsync(string userId)
{
    TokenCache userTokenCache = new SessionTokenCache(userId, _memoryCache).GetCacheInstance();

    try
    {
        AuthenticationContext authContext = new AuthenticationContext(_aadInstance, userTokenCache);
        ClientCredential credential = new ClientCredential(_appId, _appSecret);
        AuthenticationResult result = await authContext.AcquireTokenSilentAsync(_graphResourceId, credential, new UserIdentifier(userId, UserIdentifierType.UniqueId));

        return result.AccessToken;
    }
    catch (Exception)
    {
        return null;
    }
}