使用Azure ADB2C和MSAL,是否可以刷新不记名令牌而无需重新输入密码?

问题描述 投票:0回答:1

现状

我有一个具有以下设置的 ADB2C 服务器:

  • 创建了自定义用户属性
    InstancesAvailable
  • 此用户属性设置为在我的“注册并登录(推荐)”用户流程中作为应用程序声明返回
  • API 连接器被定义为在用户流程中“在令牌中包含应用程序声明之前(预览版)”执行
  • 定义从 API 连接器调用的 API 端点正在返回
    extension_InstancesAvailable
    属性,该属性将作为声明添加到身份服务器生成的不记名令牌中

所有这些都有效,典型用例是:

  1. 用户使用 MSAL 和 ADB2C 中定义的上述用户流程登录我的 React Web 应用程序
  2. 在登录过程中,我的 API 端点被调用来构建并返回由身份服务器添加的自定义
    extension_InstancesAvailable
    声明值
  3. 用户登录我的应用程序后,他的不记名令牌将正确包含
    extension_InstancesAvailable
    声明值

问题

我正在思考:我的网络应用程序中将有一个可用的操作来“添加新实例”。由于可用实例的列表是在登录期间伪造到不记名令牌中的,因此是否有一种方法可以“重新生成”用户的不记名令牌,而无需注销/登录甚至重新输入密码?

理想情况下,我想在我的网络应用程序内完成特定操作后重新生成不记名令牌,因此

extension_InstancesAvailable
包含正确的列表,包括用户刚刚创建的列表。

javascript azure azure-ad-b2c azure-ad-msal bearer-token
1个回答
0
投票

MSAL.js
不在浏览器中使用
refresh tokens
,而是使用
acquireTokenSilent 请求 新访问令牌
hidden iframe
方法。它调用用于登录的相同用户流程,并调用 API 连接器以获取
extension_InstancesAvailable
声明的更新值。如果存在网络问题、浏览器限制或用户交互,此方法会失败

下面的 GitHub 链接是一个不同的场景,用户想要刷新

ID token
,而不是
access token
。可以通过将客户端 ID 作为唯一范围传递到
acquireTokenSilent
方法来刷新前者。但是,这不会影响
extension_InstancesAvailable
声明的值,该声明仅与访问令牌相关。

// Create an instance of MSAL
const msalConfig = {
  auth: {
    clientId: "your-client-id",
    authority: "your-authority",
    redirectUri: "your-redirect-uri"
  }
};
const msalInstance = new Msal.UserAgentApplication(msalConfig);

// Define the scopes and account for the token request
const tokenRequest = {
  scopes: ["your-scopes"], // use [msalConfig.auth.clientId] to refresh ID token
  account: msalInstance.getAccount()
};

// Call acquireTokenSilent to get a new token
msalInstance.acquireTokenSilent(tokenRequest)
  .then(response => {
    // Handle the response
    console.log(response);
  })
  .catch(error => {
    // Handle the error
    console.error(error);
  });

其他参考资料

msal.js - MSAL 浏览器刷新令牌 - 堆栈内存溢出

MSAL-浏览器刷新令牌 - Microsoft 问答

令牌生命周期、过期和续订 - GitHub

是否可以使用 MSAL.js 获取刷新令牌? - 堆栈溢出

在 AJAX 调用之前从 MSAL 刷新令牌的正确方法? - 堆栈溢出

GitHub - 令牌生命周期、过期和续订(原始)

Microsoft Docs - 可配置令牌生命周期

GitHub - 适用于 JavaScript 的 MSAL

© www.soinside.com 2019 - 2024. All rights reserved.