首页 > 解决方案 > 从 chrome 扩展使用 Microsoft Graph API(msal 库)

问题描述

我正在开发 chrome 扩展,我需要针对 Microsoft 帐户对用户进行身份验证,以从后台脚本中使用 MSAL 库(Graph API)。但目前我收到错误AADSTS50011:请求中指定的回复 url 与为应用程序配置的回复 url 不匹配

不幸的是,我无法在 Microsoft 门户中输入以chrome-extension://开头的重定向 uri。

有没有办法实现这一目标,还是不行?

编辑:

好的,看来我可以为此使用chrome.identity.launchWebAuthFlow。但是在请求令牌时,需要client_secret(没有这个我得到 401 响应代码)。将此client_secret包含在扩展的后台脚本中是否安全?

如果我没看错,msal 库不需要 client_secret

标签: google-chrome-extensionmsalmsal.js

解决方案


MSAL.js 支持不同的身份验证流程。

一种称为隐式的方法需要显示一个登录页面(弹出或重定向)以供用户输入凭据。此流程不需要从您的应用程序中提供 client_secret。

要解决此流的AADSTS50011错误,您需要确保重定向 uri 已向 Azure AD 注册。确实,chrome-extension:// url 不符合 Azure 要求。

有一个完全适合这种情况的解决方案 - chrome.identity.getRedirectURL()。此函数生成此类重定向 url:

https://<app-id>.chromiumapp.org/*

app-id是您的扩展程序的 id,每次更改扩展程序解压缩路径时都会在开发环境中更改。因此,请确保及时使用 Azure 更新重定向 uri。其他解决方法是生成一个密钥并将其包含在扩展清单中。这样你就可以烘焙你的 app-id 和重定向 uri。

请注意,生成的 uri 是假的,如果您需要处理来自身份验证服务器的响应,那么您应该在回调函数中这样做:

chrome.identity.launchWebAuthFlow(
  {
    url: authUrl,
    interactive: true
  },
  function (response) {
    // do stuff with code/token, etc.
  }
);

每次您的应用程序请求身份验证时,客户端凭据授予流程无需用户授权即可工作但是在浏览器扩展中存储凭据根本不安全。

还有更多流程,但我认为它们与原始问题案例无关。


推荐阅读