ember.js 在请求受保护的资源之前,我应该尝试MSAL getTokenSilent()吗?

svmlkihl  于 2022-11-23  发布在  其他
关注(0)|答案(1)|浏览(131)

我将MSAL JS库与EmberJS SPA集成在一起。在当前的实现中,在用户请求“受保护”资源之前,我有一个getTokenSilent()调用。这意味着在用户进行身份验证之后,他们会在请求资源之前收集一个新的访问令牌。
这是有意的吗?除了额外的网络请求,我没有看到很多缺点。它应该允许非常短暂的访问令牌,并允许MSAL检查用户是否仍然处于“有效”状态(即他们没有禁用他们的帐户),因为他们登录。
我对OAUTH和MSAL非常陌生,所以一些指导会很好。

5anewei6

5anewei61#

模式确实是这样的。在向API发出请求之前,您应该调用acquireTokenSilent()函数,看看是否可以静默检索到合适的令牌。该函数将执行以下操作:

  • 检查该高速缓存中是否存在有效令牌并将其返回
  • 如果没有有效的令牌,函数将尝试获取一个带有刷新令牌的新令牌

如果两个选项都失败,则会抛出InteractionRequiredAuthError,您需要捕获并触发acquireTokenRedirect()(或acquireTokenPopup())。
您可以看到下面的普通JS MSAL示例:https://github.com/Azure-Samples/ms-identity-javascript-tutorial/tree/main/3-Authorization-II/1-call-api
检查getTokenRedirect()函数:

function getTokenRedirect(request) {

    /**
    * See here for more info on account retrieval: 
    * https://github.com/AzureAD/microsoft-authentication-library-for-js/blob/dev/lib/msal-common/docs/Accounts.md
    */

   request.account = myMSALObj.getAccountByUsername(username);
   
   return myMSALObj.acquireTokenSilent(request)
       .catch(error => {
           console.error(error);
           console.warn("silent token acquisition fails. acquiring token using popup");
           if (error instanceof msal.InteractionRequiredAuthError) {
               // fallback to interaction when silent call fails
               return myMSALObj.acquireTokenRedirect(request);
           } else {
               console.error(error);   
           }
   });
}

相关问题