gpt4 book ai didi

node.js - MSAL Node 服务和合作伙伴中心 API

转载 作者:行者123 更新时间:2023-12-03 02:22:51 24 4
gpt4 key购买 nike

tl;博士

非交互式服务中使用 msal-node,我如何授权为启用 MFA 的用户一次并且从不(或很少)必须再次授权为该用户?特别是在向合作伙伴中心 API 发出请求时。

更长的版本

我一直在尝试在 NodeJS 中创建一个与 Microsoft 合作伙伴中心 API 交互的后端服务(即守护进程)。但是,如果没有持续的用户交互,我找不到官方支持的方法来执行此操作。

基于most documentation我可以发现,没有任何用户交互的服务意味着使用“客户端凭据”流程。这对于其他 Azure API 非常有用,但在合作伙伴中心 API 中似乎不起作用,尽管 the docs说。

什么有效,以及我被迫做的,是以用户身份登录。但是,由于所有用户都启用了 MFA,因此我必须遵循概述的方法 in these docs我以用户身份手动登录并一次性交换刷新 token 。然后,我将其保存到文件中,然后守护程序可以不断地将其交换为访问 token 以及更新的刷新 token 。

msal-node 看起来并不支持仅使用开箱即用的刷新 token 。唯一接受一个参数作为参数的实例方法是 .acquireTokenByRefreshToken() ,它确实返回一个访问 token (请参阅 this sample ),但更新实例的内部缓存或返回一个新的刷新 token ,因此现有的刷新 token 将提前过期。它似乎也已被弃用,取而代之的是 .acquireTokenSilent(),但该方法要求实例的内部缓存已填充身份验证数据。但是,我没有看到任何公共(public)方法来手动设置内部缓存的数据,并且只有在调用诸如 .acquireTokenByCode() 之类的方法后才会自动设置,这些方法接受用户登录后生成的短期 token 。同样,由于所有用户都启用了 MFA,因此每次服务重新启动时都需要用户交互。

这有点像先有鸡还是先有蛋的问题。感谢任何帮助,我一直在阅读这么多 MS 文档和代码。

最佳答案

this official doc表示:

The refresh token is never returned to the user in a response

因此,按照设计,您无法通过这种方式获取和续订刷新 token 。

作为解决方法,您可以直接调用 Azure ad /token 端点 API,以通过旧 token 获取新刷新 token ,然后替换文件中的旧 token 。详情见this doc 。虽然标题是刷新访问 token ,但您可以在每个请求中获取新的刷新 token : enter image description here

以便您可以在刷新 token 即将过期时刷新它。

关于node.js - MSAL Node 服务和合作伙伴中心 API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68187077/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com