4

我们目前有一个 SPFX webpart(React 应用程序),它使用 SSO,然后“代表”用户调用 Graph API。SPFX 包安装到 SharePoint/Teams 中,安装包的管理员同意使用 Graph API。我们想要更简单的用户体验,让他们能够从 Microsoft Teams 应用商店下载应用。

是否可以使用带有静默身份验证的Microsoft Graph Toolkit 2.0来提供与 SPFX Webpart 相同的无缝体验?我能够找到的唯一示例使用TeamsProvider,但登录必须由用户启动,并且需要显示一个弹出窗口。最终,我们希望获得没有弹出窗口的体验。这可能吗?您能否提供一个链接到调用需要额外范围(例如 Mail.Read)的 Graph API 的工作示例?

我还看到了许多使用 ADAL 而不是 MSAL 或最新的 Microsoft Graph Toolkit 的示例。我们应该使用 ADAL 还是 MSAL 来实现这一点?

下面显示了使用在 App.tsx 中初始化的 TeamsProvider 的代码以及当用户使用 Teams 选项卡中的Login组件启动登录时的 Auth.tsx 弹出窗口:

应用程序.tsx:

import { TeamsProvider } from '@microsoft/mgt-teams-provider';

function App() {
  // Initialize the Microsoft Teams SDK
  microsoftTeams.initialize();

  // Define Teams as the global provider.
  TeamsProvider.microsoftTeamsLib = microsoftTeams;
  Providers.globalProvider = new TeamsProvider(AppConfiguration.TeamsConfiguration());

身份验证.tsx

import React, {useEffect, Fragment} from 'react';
import * as microsoftTeams from "@microsoft/teams-js";
import {TeamsProvider} from '@microsoft/mgt-teams-provider';

const Authentication: React.FC = () => {

    useEffect(() => {
        TeamsProvider.microsoftTeamsLib = microsoftTeams;
        TeamsProvider.handleAuth();
    });
4

1 回答 1

0

TL;DR:是的,如果您可以让用户同意从 Microsoft Graph 中提取他们的数据。

一般范围

创建令牌时选择范围基本上控制了您可以对令牌使用哪些 API。例如,可以将 API 配置为仅接受已使用范围创建令牌的请求User.ReadGET /api/me可能是这样的路由)。

https://auth0.com/docs/scopes

仅团队 SSO

正如你所得出的结论,仅将 SSO 解决方案与 Teams 一起使用是行不通的。这是由于使用@microsoft/teams-js authenticate(). 这不能被配置为(据我所知)要求其他范围,而不是获取用户自己的信息的基础。

团队提供者

使用TeamsProviderfrom@microsoft/mgt您可以获取具有其他范围的新令牌,但这需要用户同意,这必须通过打开带有某些 UI 的弹出窗口来完成。体验不会完全无缝。

经事先同意

如果您已获得用户的事先同意(由组织管理员配置),则有可能获得无缝体验。这个拉取请求的作者已经展示了如何做到这一点。通过代表令牌请求,可以获得具有附加范围的新令牌。您需要一个可以代表请求的后端。

https://docs.microsoft.com/en-us/graph/auth-v2-user

@微软团队/teamsfx

这是最近发布的用于 Teams 的新 SDK,似乎支持从 Microsoft Graph 获取数据。不确定体验是否会无缝。查看简单身份验证部分。

https://docs.microsoft.com/en-us/javascript/api/@microsoft/teamsfx https://github.com/OfficeDev/TeamsFx/tree/main/packages/sdk

于 2021-06-10T07:44:57.043 回答