适用于 Chrome 扩展的 Azure AD 应用重定向 URI

2023-12-02

我正在使用适用于 JavaScript 的 Microsoft 身份验证库 (MSAL.js)版本1.3.2在我的基于 React JS 的 chrome 扩展中。我需要支持两个登录场景,以便获得在应用程序的其余部分中使用的不记名令牌:

  1. promptLogin()处理用户第一次在我的扩展中进行身份验证。
  2. getTokenAsync()为已在我的扩展中进行身份验证的用户静默获取不记名令牌。这种方法返回一个我不使用的 id 令牌,应该吗?相反,在帖子底部的源代码中,您会看到我调用promptLogin()在此之后获取不记名令牌。

这两个方法都在 main 中调用login()基于用户是否经过身份验证的方法。从 MSAL.js 文档看来redirectUri是可选的,我的两个场景的身份验证在没有此属性的本地主机上的开发环境中按预期工作。

这个性质redirectUri当用户通过 Chrome 或新的 Microsoft Edge 与扩展程序交互时,在生产中似乎需要这样做。我不确定是什么redirectUri在这种情况下或者如果我什至需要一个。我相信它应该被格式化为https://ihmmiapcpnfpphpdinbmjfglladedjoa.chromiumapp.org/.

我期望的流程是当用户第一次单击“登录”时promptLogin()处理他们的请求。

enter image description here

我用我的帐户登录

enter image description here

然后得到这个错误

enter image description here

这是我在 Azure AD 中的应用注册和重定向 URI。 “支持的帐户类型有:任何组织目录中的帐户(任何 Azure AD 目录 - 多租户)”。我还检查了“访问令牌”和“ID 令牌”中的“要启用隐式授予流程,请选择您希望由授权端点颁发的令牌:”。

enter image description here

这是我的 MSAL 配置。

this.msalConfig = {
    auth: {
        clientId: process.env.REACT_APP_MICROSOFT_GRAPH_CLIENT_ID,
        redirectUri: "https://ihmmiapcpnfpphpdinbmjfglladedjoa.chromiumapp.org/popup.html"
    },
};

this.msalInstance = new Msal.UserAgentApplication(this.msalConfig);
this.scopes = [
    "directory.accessasuser.all", 
    "directory.readwrite.all", 
    "user.readwrite.all"
];

主要登录方式。

async login() {       
    if (this.msalInstance.getAccount()) {
        alert('authenticated');         
        const token = await this.getTokenAsync();
        return token;
        
    } else {
        alert('not authenticated please sign in');
        await this.promptLogin();
        const token = await this.getTokenAsync();
        return token;
    }        
}

我的两个场景的逻辑基于用户是否经过身份验证。

getTokenAsync() {
    return new Promise((resolve, reject) => {
        let tokenRequest = {
            scopes: this.scopes
        };
        this.msalInstance.acquireTokenSilent(tokenRequest)
        .then(response => {
            resolve(response.accessToken);
        })
        .catch(err => {
            console.error(`E: ${err}`);                
            if (err.name === "InteractionRequiredAuthError") {
                return this.msalInstance.acquireTokenPopup(tokenRequest)
                    .then(response => {
                        resolve(response.accessToken);
                    })
                    .catch(err => {
                        console.error(`E: ${err}`);
                        reject();
                    });
            }
        });
    });
}
promptLogin() {
    return new Promise((resolve, reject) => {
        let loginRequest = {
            scopes: this.scopes
        };          
        this.msalInstance.loginPopup(loginRequest)
        .then(response => {
            console.log(`res: ${JSON.stringify(response)}`);
            resolve();
        })
        .catch(err => {
            alert(`E: ${err}`);
            console.error(`E: ${err}`);
            reject();
        });
    });
}

chromium 扩展的协议是chrome-extension://,所以我相信你的重定向 uri 应该是:chrome-extension://ihmmiapcpnfpphpdinbmjfglladedjoa/popup.html

编辑:除了使用上述重定向 URI 格式外,您还需要确保以下内容:

  1. 重定向 URI 将添加到 Azure 门户中应用程序的重定向 URI(在“移动和桌面应用程序”下)。
  2. 用于重定向 URI 的页面包含在web_accessible_resources您的扩展程序的部分manifest.json.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

适用于 Chrome 扩展的 Azure AD 应用重定向 URI 的相关文章

随机推荐

  • 使用 pyodbc 将 docker python 连接到 SQL 服务器

    我正在尝试连接在 docker 容器中运行的 pyodbc python 脚本以登录到 MSSQL 数据库我尝试了各种 docker 文件 但无法建立连接 在构建 docker 或 python 尝试连接时失败 有没有人有一个可用的 doc
  • 如何对 2 个子实体进行分组并获取这两个子实体的总计?

    我想要得到总变体为我的Test Version 0 i e Test Id 100 这是我的表和记录 Test Id Version 100 0 变种 Id Name Type CategoryId 11 Variant1 Diff 2 1
  • 缓存控制的无缓存和必须重新验证之间的区别?

    来自 RFC 2616 http www w3 org Protocols rfc2616 rfc2616 sec14 html sec14 9 1 no cache 如果 no cache 指令未指定字段名称 则缓存 不得使用响应来满足后
  • WIN32与其他c字符串的区别

    我在一个小程序中得到了这段代码来读取文件 ifdef WIN32 unsigned char buffer unsigned char alloca unsigned int ui length else unsigned char buf
  • 数组创建与字符串连接哪种日志记录方法性能更好?

    在传递多段字符串进行日志记录时 最好使用可变参数还是字符串连接 在生产环境中将禁用日志记录 考虑下面的代码 public void log int logLevel String msg if logLevel gt currentLogL
  • 速率限制React客户端向API发出的请求数量

    我在客户端使用 React 和 fetch 向Discogs API 在此 API 中 每分钟最多有 60 个请求的限制 为了管理此Discogs 在响应标头中添加自定义值 例如 剩余请求 已使用的请求 或 最大允许请求 但由于cors 这
  • python解析ip地址文件

    我有一个包含多个 IP 地址的文件 4行txt大约有900个IP 我希望每行输出 1 个 IP 我怎样才能做到这一点 基于其他代码 我想出了这个 但它失败了 因为多个 IP 位于单行上 import sys import re try if
  • 如何从 dbpedia 链接或 URL 检索 XML/RDF 数据?

    最近我一直在尝试学习语义网 对于一个项目 我需要从给定的 dbPedia 链接检索数据 例如http dbpedia org page 柏林 但是当使用 java net URLConnection 检索数据时 我得到了 html 数据 如
  • Chart.js - 折线图中背景的特定部分着色

    我有一张折线图 很像这样 http www chartjs org samples latest charts line basic html 我想给这些区域上色 100 lt y lt 40 and 40 lt y lt 100轻微的红色
  • CLASSPATH 中的值的顺序重要吗?

    我有 2 个单独的 java 程序 一个在 c test 中 另一个在 c test new 中 我可以编译它们而不会出现任何错误 javac 但是当我尝试执行文件 java 时 它显示这样的错误 Exception in thread A
  • 使用 Beautiful Soup Python 模块将标签替换为纯文本

    我在用美丽的汤从网页中提取 内容 我知道有些人问过这个question之前他们都指向美丽的汤 这就是我开始使用它的方式 我能够成功获取大部分内容 但我在内容中的标签方面遇到了一些挑战 我从一个基本策略开始 如果一个节点中有多个 x 字符 那
  • 如何使用 PlaySound() 或任何基本函数/方法在 C++ 中同时播放超过 1 个 .wav 声音?

    我正在尝试制作一款游戏 我需要同时播放许多声音 我知道 v basic 或者只是知道功能 PlaySound to run wav声音 问题在于SND ASYNC我无法同时播放多个声音 但首先播放的声音会在中间跳过并播放下一个声音 有什么方
  • 无法解析符号“持久性”

    我对 Java SpringBoot 和 MySQL 都很陌生 我还在上课 所以这些对我来说没有任何意义 我没有尝试过任何事情 因为我什至不知道从哪里开始 我以为我拥有所有正确的依赖项 但是当我在 Event java 中突出显示红色问题灯
  • mp3 长度(以毫秒为单位)

    我需要一个脚本或命令行工具来获取 mp3 长度 以毫秒为单位 这些文件是用 lame 编码的 64 kbits mono cbr 我为我选择的语言 ruby 寻找了 libmad 但没有发现任何值得注意的东西 def self get au
  • 如何在C++中使用fft生成音频频谱? [关闭]

    Closed 这个问题需要多问focused 目前不接受答案 我想生成一个音频频谱 如这个视频 的 mp3 音频文件 基本上这个问题需要计算音频信号的 fft 我如何用 C C 编程 我查看了几个开源库 例如FFTW我真的不知道如何使用这些
  • 带有 jQ​​uery UI DatePicker 值的 ASP.NET 文本框在回发时丢失

    我有一个在 ASP NET 文本框控件上使用 jQuery UI DatePicker 的应用程序 该控件按预期工作 但我注意到当您从服务器调用回发 通过提交按钮 时 输入的值会在应用程序中丢失 想知道大家有没有经历过这种情况 您必须采取哪
  • Azure Devops Git 分支区分大小写

    当我通过 Azure Devops 门户查看我的分支时 我注意到我有以下内容 feature feature1 Feature feature2 通过我的 git 客户端 Fork 在本地看起来是正确的 feature feature1 f
  • 问:解决Java中的almostIncreasingSequence问题(Codefights)

    我无法通过最后的隐藏测试 你能告诉我我错过了什么吗 提前谢谢 以下是语句 给定一个整数序列作为数组 确定是否可以通过从数组中删除不超过一个元素来获得严格递增序列 boolean almostIncreasingSequence int se
  • 使用非托管代码使用扩展名获取文件图标时在 x86 系统上出现异常

    我正在开发磁盘目录应用程序 需要我使用从数据库检索的文件扩展名来获取文件图标 使用其扩展名获取文件图标的代码在具有任何 CPU 调试配置的 Windows 7 x64 计算机上工作得非常好 但是当我在调试配置中切换到 x86 时 我收到以下
  • 适用于 Chrome 扩展的 Azure AD 应用重定向 URI

    我正在使用适用于 JavaScript 的 Microsoft 身份验证库 MSAL js 版本1 3 2在我的基于 React JS 的 chrome 扩展中 我需要支持两个登录场景 以便获得在应用程序的其余部分中使用的不记名令牌 pro