google-chrome-extension - 从 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
解决方案
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.
}
);
每次您的应用程序请求身份验证时,客户端凭据授予流程无需用户授权即可工作。但是在浏览器扩展中存储凭据根本不安全。
还有更多流程,但我认为它们与原始问题案例无关。
推荐阅读
- google-people-api - 从 Contacts api 迁移到 People API
- javascript - 如何从数组中获取 ID 列表,将每个项目与 Firestore 中的 ID 匹配,并将关联数据的 JSON 返回到前端站点?
- python - 全新的数据科学——确保我理解集合
- json - 评论标记与产品标记:它们可以作为评论网站互换吗?
- php - phpmailer在参数传递时说无效的电子邮件
- java - 如何制作一个按钮来更改另一个活动中的布尔变量的值?
- spring-boot - 如何解析 FeignClient 响应 json 中的蛇案例字段?
- mysql - 如何编写递归 SQL 查询
- css - 如何让菜单滚动
- google-apps-script - 为什么范围保护需要这么长时间