【问题标题】:SPFX (teams), Graph API on Behalf of in the backendSPFX(团队),代表后端的图形 API
【发布时间】:2021-11-05 05:17:43
【问题描述】:

我有一个托管在团队中的 webpart SPFX。 Webpart 相当复杂,因此有相应的后端。

当用户在前端执行特定的搜索操作时,我希望后端在向前端返回响应之前合并数据库中的一些数据和图表中的一些数据。

所以流程是这样的:

  1. 用户登录团队。
  2. 用户在搜索字段(前端)中输入搜索词。
  3. 前端需要一个访问令牌(由团队根据登录用户生成)来访问后端。

这是在前端(spfx webpart)中生成访问令牌的方式:

let provider = await context.aadTokenProviderFactory.getTokenProvider();

let graphToken = await provider.getToken("https://graph.microsoft.com/", true);

let backendToken = await provider.getToken("backend base url", true);

我的问题在后端,我无法创建一个访问令牌,让我代表登录到团队的用户访问图形 API。

我可以生成这样的令牌没有问题:

IConfidentialClientApplication confidentialClientApplication = ConfidentialClientApplicationBuilder
                    .Create(clientId)
                    .WithTenantId(tenantId)
                    .WithClientSecret(clientSecret)
                    .Build();

                ClientCredentialProvider authProvider = new ClientCredentialProvider(confidentialClientApplication);
                return new GraphServiceClient(authProvider);

但此客户端基于客户端 ID 和密码,而不是代表登录团队的用户。

有没有办法做我想要实现的目标?无需用户先登录团队 (1),然后再登录后端 (2)。

【问题讨论】:

  • 您能否确认以下答案是否解决了您的问题?如果是,请接受答案,以便对其他社区成员有所帮助。

标签: .net-core azure-active-directory microsoft-graph-api microsoft-teams spfx


【解决方案1】:

MS Teams 支持 SSO,您可以在其中获取当前用户的 OBO 访问令牌。目前,SPFx 不支持这一点……他们说他们正在努力将 SSO 添加到 SPFx,但没有 ETA。不过基础架构已经存在(Teams 和 Office 插件都使用相同的底层基础架构...... SPFx 是唯一一个尚未实现它的人)。

您是否有特定原因需要通过AadHttpClient 从 SPFx API 获取令牌?如果没有,请考虑从 Teams SDK 获取令牌,而不是通过 SSO。每个用户都会有第一次同意,但在那之后,他们不应该得到它。

文档:https://docs.microsoft.com/microsoftteams/platform/tabs/how-to/authentication/auth-aad-sso

我发布了一个 MS 学习模块来演示这一点,但它是 100% 团队(即:不使用 SPFx)。该模块还指向整个解决方案的代码示例和 YouTube 截屏视频(有关链接,请参阅介绍单元): https://docs.microsoft.com/learn/modules/msteams-sso/

【讨论】:

    猜你喜欢
    • 2017-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-27
    • 2023-04-08
    • 2021-08-11
    • 1970-01-01
    相关资源
    最近更新 更多