小编Aut*_*ant的帖子

AAD:使用 MSAL 时,如果不是通过调用 acquireTokenPopup,如何发送“交互式授权请求”来解析 AADSTS65001?

我有一个用 TypeScript 编写的单页应用程序。它需要调用中间层服务,而中间层服务将依次调用 Microsoft Graph API。

在我的 SPA 中,我使用MSAL 库,并通过调用 UserAgentApplication.loginRedirect() 来登录用户

然后,我调用 acquireTokenPopup 并在访问令牌请求参数中仅传递一个范围:由我的中间层服务定义的范围。执行此操作后,我看到弹出窗口,但随后它消失了(我从未看到任何同意提示)。这成功获取了一个令牌,然后 SPA 将其作为 HTTPS 请求中授权标头上的承载令牌发送到中间层。

然后,中间层尝试通过调用具有如下属性的 AAD 来获取 OBO 令牌:

const grantType = "urn:ietf:params:oauth:grant-type:jwt-bearer";
const assertion = userAccessToken;
const scope = "https://graph.microsoft.com/Calendars.Read " +
    "https://graph.microsoft.com/Calendars.Read.Shared " +
    "https://graph.microsoft.com/Calendars.ReadWrite " +
    "https://graph.microsoft.com/Calendars.ReadWrite.Shared " +
    "openid profile email offline_access";
const requestedTokenUse = "on_behalf_of";
Run Code Online (Sandbox Code Playgroud)

它还具有发送的客户端机密,该机密在中间层的 AAD 注册中定义。当向 AAD 端点发出此请求以检索 OBO 令牌时,它总是失败并显示以下错误:

{"error":"invalid_grant","error_description":"AADSTS65001: The user or administrator has not consented to use the application with ID '<ID of …
Run Code Online (Sandbox Code Playgroud)

azure azure-active-directory azure-ad-msal

10
推荐指数
1
解决办法
2万
查看次数

当看似相同的三元运算符构造没有时,为什么使用“if-else”语句会产生 TypeScript 编译器错误?

我有一个函数,旨在返回值IDBValidKey或转换为IDBValidKey. 如果我使用三元运算符编写函数,它可以正常工作,但如果我将其编写为 if-else 语句,则会导致编译器错误:

interface IDBValidKeyConvertible<TConverted extends IDBValidKey> {
    convertToIDBValidKey: () => TConverted;
}

function isIDBValidKeyConvertible<TConvertedDBValidKey extends IDBValidKey>(object: unknown): object is IDBValidKeyConvertible<TConvertedDBValidKey> {
    return typeof((object as IDBValidKeyConvertible<TConvertedDBValidKey>).convertToIDBValidKey) === "function";
}

type IDBValidKeyOrConverted<TKey> = TKey extends IDBValidKeyConvertible<infer TConvertedKey> ? TConvertedKey : TKey;

function getKeyOrConvertedKey<TKey extends IDBValidKey | IDBValidKeyConvertible<any>>(input: TKey): IDBValidKeyOrConverted<TKey> {
    if (isIDBValidKeyConvertible<IDBValidKeyOrConverted<TKey>>(input)) {
        return input.convertToIDBValidKey();
    } else {
        return input;
    }
}

function getKeyOrConvertedKeyTernary<TKey extends IDBValidKey | IDBValidKeyConvertible<any>>(input: TKey): IDBValidKeyOrConverted<TKey> {
    return (isIDBValidKeyConvertible<IDBValidKeyOrConverted<TKey>>(input)) ? input.convertToIDBValidKey() : …
Run Code Online (Sandbox Code Playgroud)

typescript typescript-generics

8
推荐指数
1
解决办法
216
查看次数

如何判断特定模块是 CommonJS 模块还是 ES6 模块?

我有一个 Azure 函数(使用 NodeJS),我试图从中使用另一个团队发布的 npm 模块。在 npm 添加有问题的模块后,我尝试像这样使用它:

import * as Model from "@teo/app-model";
...
const appModel: Model.TheModel = new Model.TheModel([]);
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试运行 Azure 函数时,出现此错误:

[error] Worker was unable to load function pump: 'SyntaxError: Unexpected token export'
Run Code Online (Sandbox Code Playgroud)

我可以在网上找到的与该错误消息相关的结果表明,此错误通常表明我正在尝试使用 ES6 模块,这是 Node 不支持的(相反,我应该使用 CommonJS 模块)。挑战在于我认为该模块是一个 CommonJS 模块。生成模块的项目的 tsconfig.json 在 compilerOptions 中有这一行:

"module": "commonjs"
Run Code Online (Sandbox Code Playgroud)

为了验证或排除 ES6 vs CommonJS 问题,如果我查看 Azure Function 的 node_modules 目录中导入的模块,有没有办法通过查看它来判断它是 ES6 模块还是 CommonJS 模块?

谢谢!

javascript node.js node-modules typescript es6-modules

6
推荐指数
1
解决办法
860
查看次数

如何删除声称由版本保留的 Azure DevOps 构建定义?

我正在尝试删除 Azure DevOps 构建定义,但它不允许我删除,因为它说:

“与请求的管道相关的一个或多个构建由版本保留。管道和构建不会被删除。”

然而,没有明显的方法来查看哪个版本导致构建被保留。当然,我尝试在线搜索,但如何在 Web UI 中执行此操作的所有示例/屏幕截​​图都显示了 Azure DevOps 网站几次迭代之前的 UI,因此所有控件看起来都不再相同。例如,我在任何地方都没有看到锁定图标。

如何找到保留这些构建定义的版本,以便删除它们,然后删除构建定义?

谢谢!

azure-devops

6
推荐指数
1
解决办法
7011
查看次数

使用 MSAL 实现 AAD 身份验证时,我将使用 navigateToLoginRequestUrl 选项做什么?

文件告诉我什么样的影响设置/不设置这个选项的做法,但它并没有说为什么人会选择设置或不设置。

登录后我什么时候想关闭/打开“默认导航”到“起始页”?我看到如果我不设置它,它默认为 true,导致我的页面作为成功 loginRedirect 工作流程的一部分被加载三次(一次是我,两次是来自身份验证页面/代码的重定向),但如果我将其设置为 false,我的页面仅加载两次(一次由我加载,一次作为重定向的一部分)并且用户似乎仍然成功登录。

谢谢!

azure-active-directory azure-ad-msal

5
推荐指数
1
解决办法
1169
查看次数

为什么在 Jest 中运行时 for..of 循环对 Iterables 不起作用?

我有以下打字稿代码:

const myMap = new Map([["name", 5]]);
for (const foo of myMap.values()) {
    console.log(foo);
}
Run Code Online (Sandbox Code Playgroud)

当我直接在 node (v8.12.0) 中运行此代码时,它会工作并将“5”打印到控制台。

如果我在 Jest 测试中运行完全相同的代码,它永远不会执行 for 循环的内容。它运行 for 条件,然后跳过循环,从不实际枚举值。

这是为什么?是否有关于 Jest 使用的 JS 运行时(不是节点吗?)不支持..of over iterables?

谢谢!

jestjs

3
推荐指数
1
解决办法
353
查看次数