【发布时间】:2019-09-13 18:16:11
【问题描述】:
我正在使用 Microsoft Graph SDK 为我的应用程序(不是用户)获取访问令牌,以便从共享点读取。我一直在关注这个document,并发布了这个SO question。链接 SO 中的代码是相同的。我能够在 azure 门户中添加应用程序权限并授予它们(通过按下按钮)。问题是,返回使用的令牌中不包含任何角色/ scp 声明。因此,在使用令牌时,我收到 “令牌中需要存在 scp 或角色声明” 消息。
可以肯定的是,我在获取访问令牌时传递的范围的唯一值是:https://graph.microsoft.com/.default。我没有通过 Sites.ReadWrite.All 之类的其他任何东西(如果我添加该范围,我会得到一个例外)。我不确定如何继续进行故障排除,我们将不胜感激。
编辑:使用如下所示的图形 SDK 添加代码:
var client = new ConfidentialClientApplication(id, uri, cred, null, new SessionTokenCache());
var authResult = await client.AcquireTokenForClientAsync(new[] {"https://graph.microsoft.com/.default"});
var token = authResult.AccessToken;
var graphServiceClient = new GraphServiceClient(new DelegateAuthenticationProvider(async request => {request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", token)}));
var drives = await graphServiceClient.Sites[<sharepoint_host>].SiteWithPath(<known_path>).Drives.Request().GetAsync();
【问题讨论】:
-
你能添加一些你用来获取令牌的代码吗?
-
它在我链接到的另一个 SO 线程中,但为了方便起见,我确实编辑了我的帖子并添加了代码
-
我的应用初始化看起来有点不同:
var app = new ConfidentialClientApplication(ClientId, Authority, RedirectUri, credentials, null, new TokenCache()); -
还没有机会去看看。我只是将所有 cmets 标记为有用。如果/何时解决,我会通知您,如果确实解决了问题,我会进行检查。
-
@juunas 就是这样...我需要使用重载的 CCA 构造函数。
标签: c# azure azure-active-directory microsoft-graph-api microsoft-graph-sdks