C#中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
相关产品推荐
相关产品推荐

