ADB2C AcquireTokenSilent行为

时间:2018-11-02 07:03:04

标签: angular single-page-application azure-ad-b2c msal

我正在尝试在Angular 5 SPA中使用MSAL库。我对AcquireTokenSilent()函数的行为感到有些困惑。

当前,在我的应用程序中,我需要每5分钟刷新一次访问令牌。据我了解,由于MSAL.js使用隐式授予流,因此它不允许我们刷新令牌。

因此尝试使用AcquireTokenSilent()函数来获取新令牌,并且确实会返回新令牌,以及该令牌的新到期日。一旦我的应用程序通过了ADB2C配置的“具有OpenID Connect的Web应用程序会话”时间(分钟),此函数就不会返回令牌,并告诉我用户会话已到期。这是预期的行为。

现在我的问题是:

  1. AcquireTokenSilent()函数在内部的行为如何?

  2. 我可以让该函数的用户每5分钟获取一次新令牌吗?我们是否可以链接此访问令牌以根据刷新令牌的生存期获得新令牌。当前不确定在什么基础上获取新令牌。目前,它会获取新令牌,直到“带有OpenID Connect的Web应用会话”仍然有效为止。

1 个答案:

答案 0 :(得分:0)

  

AcquireTokenSilent()函数在内部如何表现?

它首先尝试从其缓存中获取令牌。 然后,如果失败,它将使用隐藏的iframe尝试获取新的iframe。 它使用的URL与常规登录相同,只是使用prompt=none。 如果用户具有活动会话,这将使其在重定向中返回令牌。 如果会话已过期,则会返回错误。

这是用于acquireTokenSilent的JSDoc:

/*
   * Used to get the token from cache.
   * MSAL will return the cached token if it is not expired.
   * Or it will send a request to the STS to obtain an access_token using a hidden iframe. To renew idToken, clientId should be passed as the only scope in the scopes array.
   * @param {Array<string>} scopes - Permissions you want included in the access token. Not all scopes are  guaranteed to be included in the access token. Scopes like "openid" and "profile" are sent with every request.
   * @param {string} authority - A URL indicating a directory that MSAL can use to obtain tokens.
   * - In Azure AD, it is of the form https://&lt;tenant&gt;/&lt;tenant&gt;, where &lt;tenant&gt; is the directory host (e.g. https://login.microsoftonline.com) and &lt;tenant&gt; is a identifier within the directory itself (e.g. a domain associated to the tenant, such as contoso.onmicrosoft.com, or the GUID representing the TenantID property of the directory)
   * - In Azure B2C, it is of the form https://&lt;instance&gt;/tfp/&lt;tenant&gt;/<policyName>/
   * - Default value is: "https://login.microsoftonline.com/common"
   * @param {User} user - The user for which the scopes are requested.The default user is the logged in user.
   * @param {string} extraQueryParameters - Key-value pairs to pass to the STS during the  authentication flow.
   * @returns {Promise.<string>} - A Promise that is fulfilled when this function has completed, or rejected if an error was raised. Resolved with token or rejected with error.
   */
  

我可以让此功能的用户每5分钟获取一次新令牌吗?我们是否可以链接此访问令牌以根据刷新令牌的生存期获得新令牌。当前不确定在什么基础上获取新令牌。目前,它会获取新令牌,直到“带有OpenID Connect的Web应用会话”仍然有效。

本机应用程序没有刷新令牌。 它们在不受信任的环境中运行,因此无法通过刷新令牌信任。

您应该使用的方法是:

尝试使用acquireTokenSilent获取令牌。 如果失败,请重新验证用户身份/向他们显示一个页面,说明他们需要再次登录并单击+按钮。