C# 从已生成的Microsoft Graph资源访问令牌中获取SharePoint访问令牌(https://graph.microsoft.com)

C# 从已生成的Microsoft Graph资源访问令牌中获取SharePoint访问令牌(https://graph.microsoft.com),c#,azure-active-directory,adal,C#,Azure Active Directory,Adal,我正在尝试使用已生成的Microsoft graph资源访问令牌获取SharePoint online网站集的访问令牌,并使用Pnp AuthManger传递该访问令牌以获取网站集的客户端上下文 有人能告诉我怎么做吗?是否可行 我知道一个人可以对不同的资源组进行两次不同的身份验证调用 可在本文下面找到,但它更新了Microsoft.IdentityModel.Clients.ActiveDirectory中的AuthenticationContext类,并且不再具有AuthenticationC

我正在尝试使用已生成的Microsoft graph资源访问令牌获取SharePoint online网站集的访问令牌,并使用Pnp AuthManger传递该访问令牌以获取网站集的客户端上下文

有人能告诉我怎么做吗?是否可行

我知道一个人可以对不同的资源组进行两次不同的身份验证调用

可在本文下面找到,但它更新了Microsoft.IdentityModel.Clients.ActiveDirectory中的AuthenticationContext类,并且不再具有AuthenticationContext.AcquireTokenByRefreshTokenAsync方法


注意:我正在为上述内容使用.net库。

ADAL支持为多个资源获取令牌。您仍然可以使用ADAL库来满足您的要求

是的,在ADAL 3中,AcquireTokenByRefreshToken方法不存在。但刷新令牌仍存在于令牌缓存中,您实际上不需要从自己的应用程序代码中使用刷新令牌。使用ADAL 3,当您想要获取不同资源的访问令牌时,可以使用
AcquireTokenSilentAsync
方法:

 string userObjectID = ClaimsPrincipal.Current.FindFirst("http://schemas.microsoft.com/identity/claims/objectidentifier").Value;
 AuthenticationContext authContext = new AuthenticationContext(Startup.Authority, new NaiveSessionCache(userObjectID));
 ClientCredential credential = new ClientCredential(clientId, appKey);
 result = await authContext.AcquireTokenSilentAsync(YourResource, credential, new UserIdentifier(userObjectID, UserIdentifierType.UniqueId));
调用该方法时,它将检查令牌缓存。如果是不存在访问令牌(或访问令牌已过期)的差异资源,它将使用刷新令牌(如果存在且未过期)获取该资源的新访问令牌