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

Choosing authentication flow for a web app with SPA at front end

我正在开发一个使用 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 在线以及 AD 登录一起使用)。

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

Should I login with the server first and then use MSAL.js and login again with a login_hint (so hopefully without user entering his credentials two times)?

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