2017-08-13 148 views
0

我正在開發SPA,Azure AD B2C作爲身份提供商。我正在使用MSAL JavaScript library,它大多工作正常。我可以創建用戶,登錄併爲我的Web API後端獲取訪問令牌。Azure AD B2C未返回刷新令牌

目前唯一的問題是,B2C端點沒有返回刷新令牌,所以當訪問令牌到期時,UserAgentApplication類中的acquireTokenSilent方法失敗,意味着使用刷新令牌刷新過期的訪問令牌。

我在B2C中的應用程序在其屬性中配置了「包含web應用/ web API」和「允許隱式流」設置爲「是」。在「API訪問」部分中,「訪問用戶的個人資料」下的「openid」和「offline_access」範圍均被打勾。應用程序本身具有「讀取」,「寫入」和「user_impersonation」範圍(不確定是否重要)。

enter image description here

「offline_access」包含在我的範圍,我試過事件創建應用程序之一,像讀/寫範圍和包括以及(如「https://mytenant.onmicrosoft.com/testapp/offline_access」),但似乎沒有任何工作。響應從來沒有刷新令牌,既不是id令牌,也不是訪問令牌。

我注意到的是,當我轉到我創建的SignUp-SignIn策略並嘗試從那裏運行端點時,「offline_access」範圍在下拉列表中甚至不可用。即使我複製底部的「運行端點」鏈接,並在運行它之前將該作用域添加到URL中,該響應也不包含刷新令牌。

enter image description here

當我點擊頂部的鏈接,似乎給我關於端點和支持的範圍下只有「OpenID的」是一些細節。

不知道我在這裏失蹤如此任何想法將不勝感激。

回答

2

立即運行鏈接生成使用implicit flow登錄一個auth請求。隱流,顧名思義,不要讓你獲得一個刷新令牌由於安全方面的原因。因此,下拉不會給你offline_access範圍,因爲它不起作用。如果您需要刷新令牌,則需要運行confidential code flow。如果您選擇,可以通過手動修改「立即運行」鏈接生成的URL來完成此操作。具體而言,在URL:

  1. 設置RESPONSE_TYPE =代碼(不是令牌)

  2. 添加 「offline_access」 到範圍

一旦你獲得一個代碼列表,使POST請求,如documentation所示,以交換刷新令牌的代碼。