azure - 对 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);
解决方案
看起来您正在尝试遵循 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 流程。在大多数情况下,可以使用并推荐更安全的替代方案。此流程需要对应用程序具有非常高的信任度,并带有其他流程中不存在的风险。只有在无法使用其他更安全的流程时,您才应该使用此流程。
推荐阅读
- mongodb - Mongoose Model.deleteMany() 仅删除匹配项的第一个元素
- linux - 关于可解析输出的家伙
- css - 单选按钮内的居中标签
- tensorflow - 数据管道中的批量大小和 midel.fit() 中的批量大小有什么区别?
- dart - Flutter 转换列表子类型
- python-3.x - OpenCV从多个文件中提取第n帧
- java - 如何从 txt 文件中读取并根据 Java 中的数字和字符串分隔文本
- c# - 验证未在模式弹出窗口中触发
- github - 为什么我从 github 获取只读文件系统,并且在尝试安装 apache 气流时出错?
- javascript - 如何单击一个元素,将鼠标移到其他元素上,然后选择您使用 JavaScript 悬停的那些元素?