为前端带有 SPA 的 Web 应用程序选择身份验证流程

问题描述

我正在开发一个使用 Microsoft Graph 的应用程序。它曾经是使用 Razor 页面的 ASP .NET Framework Web 应用程序,但几乎完全转换为具有 ASP .NET 后端的 Angular SPA。目前,我们在后端使用授权代码流来登录用户。 Web API 已启用会话,因此客户端只需使用与之前 Razor 应用程序相同的 cookie。 但是最近我们越来越多地考虑直接在客户端上执行一些 Graph 请求,现在我正在寻找一种适当的方法来重构我们的身份验证以更好地满足以下要求:

  1. 登录用户并在服务器上进行处理,以便服务器可以使用委派的 Graph 权限并调用 Graph API。
  2. 为客户端提供一种无需使用我们的服务器即可直接调用 Graph 的方法
  3. 遵守当前的最佳做法,以便在客户端上执行 #2。
  4. 在 IFRAME 中禁用第三方 cookie(我们的应用可以显示并与 SharePoint Online 以及 AD 登录一起使用)。

我不确定共享服务器为访问图形而获得的访问令牌的最佳方式是什么,或者从安全角度来看它是否可行。我应该先登录服务器,然后使用 MSAL.js 并使用 login_hint 再次登录(因此希望用户无需输入两次凭据)?将不胜感激任何输入。

解决方法

我是否应该先使用服务器登录,然后使用 MSAL.js 并使用 login_hint 再次登录(因此希望用户无需输入两次凭据)?

是的,这是我们推荐的方法。您可以使用 MSAL.js ssoSilent 尝试使用现有会话中的 login_hint(或 sid)对用户客户端进行静默身份验证。