首页 > 解决方案 > 对 microsoft Graph API 的后台访问

问题描述

我正在为客户开发单页应用程序。我需要创建一个脚本,允许我在没有用户交互的情况下访问我的应用程序。例如,我按下一个按钮,脚本会自动让我登录(我知道用户的用户名和密码)。用户不需要看到我输入用户名和密码的窗口。可能吗?目前我的登录脚本是:

const authResult = await msalClient.loginPopup(msalRequest);
localStorage.setItem('msalAccount', authResult.account.username);

// Get the user's profile from Graph
user = await getUser();
// Save the profile in session
localStorage.setItem('graphUser', JSON.stringify(user));
if(accountAttivo!=""){
setActiveUser();
}
updatePage(Views.home);

标签: azuregraphazure-active-directorymicrosoft-graph-api

解决方案


看起来您正在尝试遵循 ROPC 流程,因为您在脚本中使用用户名和密码凭据,在我们调用 getUser() 之前,必须从 AAD 获取访问令牌。要使用图形 api 获取任何详细信息,我们需要有访问令牌,请阅读有助于您更多理解的文章。

假设我们编写了一个名为 getAccessToken() 的函数来获取令牌。获取令牌并保存在会话中后,可以在 getUser() 中使用以下代码来获取用户配置文件。

const options = {
    authProvider,
};
const client = Client.init(options);
let res = await client.api('/me')
    .get();

在按钮单击事件的代码流中调用函数 getAccessToken() 和 getUser() 应该绕过用户与应用程序的交互以输入凭据。

注意:Microsoft 不建议用户使用 ROPC 流程。在大多数情况下,可以使用并推荐更安全的替代方案。此流程需要对应用程序具有非常高的信任度,并带有其他流程中不存在的风险。只有在无法使用其他更安全的流程时,您才应该使用此流程。


推荐阅读