我有一个具有以下设置的 ADB2C 服务器:
InstancesAvailable
extension_InstancesAvailable
属性,该属性将作为声明添加到身份服务器生成的不记名令牌中所有这些都有效,典型用例是:
extension_InstancesAvailable
声明值extension_InstancesAvailable
声明值我正在思考:我的网络应用程序中将有一个可用的操作来“添加新实例”。由于可用实例的列表是在登录期间伪造到不记名令牌中的,因此是否有一种方法可以“重新生成”用户的不记名令牌,而无需注销/登录甚至重新输入密码?
理想情况下,我想在我的网络应用程序内完成特定操作后重新生成不记名令牌,因此
extension_InstancesAvailable
包含正确的列表,包括用户刚刚创建的列表。
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-浏览器刷新令牌 - Microsoft 问答令牌生命周期、过期和续订 - GitHub是否可以使用 MSAL.js 获取刷新令牌? - 堆栈溢出在 AJAX 调用之前从 MSAL 刷新令牌的正确方法? - 堆栈溢出GitHub - 令牌生命周期、过期和续订(原始)Microsoft Docs - 可配置令牌生命周期GitHub - 适用于 JavaScript 的 MSAL