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

时间:2017-08-29 13:23:24

标签: c# azure-active-directory adal

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

有人可以建议我如何做到这一点?是否可行?

我知道可以为不同的资源组进行两次不同的身份验证调用。

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

http://blogs.perficient.com/microsoft/2016/08/getting-access-tokens-for-both-sharepoint-and-microsoft-graph/

注意:我在上面使用.net库。

1 个答案:

答案 0 :(得分:1)

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));

调用该方法时,它将检查令牌缓存。如果差异资源不存在访问令牌(或访问令牌已过期),则它将使用刷新令牌(如果存在且未过期)来获取该资源的新访问令牌。