You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#中SharePoint代用户访问:断言令牌获取与授权码示例需求

问题:如何获取用于SharePoint访问的授权码/断言令牌?

背景

我有一个包含多个模块的Web应用,其中一个模块需要从SharePoint目录获取多个Excel文件并合并数据。目前通过将文件夹映射到OneDrive访问,但始终使用我的个人OneDrive凭据,需要定期刷新。正确的做法是代表登录到Web应用的用户直接访问SharePoint。我已在Azure中配置好委托API权限,拥有客户端ID和密钥等信息。

当前代码

我尝试通过以下代码获取令牌,但运行后提示未提供断言令牌:

var client = new RestClient("https://login.microsoftonline.com/XXXX/oauth2/v2.0/token");

var request = new RestRequest();
request.Method = Method.Post;
request.AddHeader("Content-Type", "application/x-www-form-urlencoded");
request.AddParameter("client_id", "MYCLIENTID", ParameterType.GetOrPost);
request.AddParameter("client_secret", "MYSECRET", ParameterType.GetOrPost);
request.AddParameter("scope", "https://MYTenent.sharepoint.com/.default", ParameterType.GetOrPost);
request.AddParameter("grant_type", "urn:ietf:params:oauth:grant-type:jwt-bearer", ParameterType.GetOrPost);
request.AddParameter("requested_token_use", "on_behalf_of", ParameterType.GetOrPost);

RestResponse response = client.Execute(request);

后续计划将令牌传递给身份验证提供程序,用于实例化GraphServiceClient以获取列表、文件等资源。

核心问题

我需要知道:如何获取断言令牌? 希望现有代码方向正确,仅缺少断言令牌。

更新1

我尝试过一个无帮助的答案,复制代码替换信息后报错。有人询问是否能从URL获取授权码,由于使用双因素认证,我未在登录URL中找到授权码。在var info = await _signInManager.GetExternalLoginInfoAsync();行后断点查看,info变量包含访问令牌、ID令牌等,但无授权码,且授权码已被用于获取访问令牌。

更新2

我了解到OBO(代表用户)并非所需方案,使用委托权限需采用授权码流(Auth Code flow)而非客户端凭据流,但无法从用户初始登录过程中获取授权码,也不知道其他获取方式。我需要能获取授权码的简单代码示例,而非仅提供文档链接。


内容的提问来源于stack exchange,提问作者Andrew Casey

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 09:50:37