我们目前有一个SPFX Web部件(React应用程序(,它使用SSO,然后"代表"用户调用Graph API。SPFX软件包安装到SharePoint/Teams中,安装该软件包的管理员同意使用Graph API。我们想要一个更简单的用户体验,他们可以从Microsoft Teams应用商店下载应用程序。
是否可以使用带有静默身份验证的Microsoft Graph Toolkit 2.0来提供与SPFX Web部件相同的无缝体验?我能找到的唯一样本使用TeamsProvider,但登录必须由用户启动,并需要显示弹出窗口。最终,我们希望有一个没有弹出窗口的体验。这可能吗?你能提供一个链接到调用需要额外作用域(如Mail.Read(的Graph API的工作示例吗?
我还看到了许多使用ADAL而不是MSAL或最新的Microsoft Graph Toolkit的例子。我们应该使用ADAL还是MSAL来实现这一点?
以下显示了当用户使用Teams选项卡中的login组件启动登录时,在App.tsx和Auth.tsx弹出窗口中初始化的TeamsProvider的代码:
应用程序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());
Auth.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();
});
TL;DR:是的,如果您可以让用户同意从Microsoft Graph中提取他们的数据。
一般范围
在创建令牌时选择作用域基本上控制了可以使用令牌的API。例如,API可以被配置为仅接受已使用作用域User.Read
创建令牌的请求(GET /api/me
可以是这样的路由(。
https://auth0.com/docs/scopes
仅团队SSO
正如您总结的那样,仅在Teams中使用SSO解决方案是行不通的。这是由于使用@microsoft/teams-js
authenticate()
提供的令牌的作用域有限。据我所知,这不能被配置为要求除了获取用户自己信息的基础之外的其他范围。
团队提供商
使用@microsoft/mgt
中的TeamsProvider
,您可以获取具有额外作用域的新令牌,但这需要用户同意,这必须通过打开带有某些UI的弹出窗口来完成。这种体验不会完全无缝。
事先同意
如果用户预先同意(由组织管理员配置(,则可以获得无缝体验。这个pull请求的作者已经展示了如何做到这一点。通过代表令牌请求,可以获得一个具有额外作用域的新令牌您需要一个可以代表请求进行的后端
https://learn.microsoft.com/en-us/graph/auth-v2-user
@微软团队/teamsfx
这是最近发布的一个新的团队SDK,似乎支持从Microsoft Graph获取数据。不确定这种体验是否会天衣无缝。查看"简单身份验证"部分。
https://learn.microsoft.com/en-us/javascript/api/@microsoft/teamsfxhttps://github.com/OfficeDev/TeamsFx/tree/main/packages/sdk