2

這裏Azure的移動應用清爽令牌的背景:服務器上

  • 需要與谷歌/ Facebook的/ MSA認證
  • 需要我們自己的要求添加到MobileServiceAuthenticationToken使用在客戶端
  • 想擁有刷新令牌功能(我知道FB沒有)

我有這個工作LoginAsync並得到MobileServiceAuthenticationToken回來。然後我調用一個自定義驗證控制器,該控制器上有一個[Authorize]屬性。

自定義身份驗證控制器從委託人複製了一些聲明,然後將這些聲明添加到這些聲明中,並創建一個返回給客戶端的新令牌。

使用LoginAsync所有這些保持令牌流向所有呼叫,這很好。

因此,令牌到期,我在客戶端上呼叫RefreshUserAsync。此時,使用我們的定製聲明的MobileServiceAuthenticationToken將由MobileAppService中的默認聲明替代,而無需聲明。我期待這一點。

所以現在我必須再次調用自定義授權控制器才能將我們的權利要求添加回身份令牌。

這個工程,但它感覺笨拙。這是兩次往返。

我在找的是刷新服務器端的身份提供者訪問令牌,並在同一個方法中,用我們的東西更新身份令牌。

我知道/.auth/refresh來自客戶端的呼叫作爲RefreshUserAsync的替代方案。有沒有類似的調用,我可以從我的控制器在後端沒有設置整個System.Net.Http.HttpClient事情?

例如:我在後端使用this.User.GetAppServiceIdentityAsync<GoogleCredentials>(this.Request)來獲取身份提供者信息而不進行HTTP調用。

這樣的事情?

在此先感謝。

回答

2

簡短版本 - 沒有。

更長的版本 - 您需要代表用戶調用後端的/.auth/refresh,然後添加您的聲明。 /.auth端點位於不同的服務上,您的後端無法通過Http訪問。

GetAppServiceIdentityAsync()方法仍然會進行HttpClient調用,因此您不會保存自己的往返行程。

+0

謝謝。並感謝您的快速回復! – nhwilly

+1

因爲我不知道幕後會發生什麼,所以這可能是一個愚蠢的假設......但是,我需要對從後端生成的對'/ .auth/refresh'調用返回的響應進行任何操作嗎?是內部更新,我不能看到?因爲我剛剛將這個.Request的所有頭文件複製到了我的後端HttpClient並進行了調用,它似乎正在工作。似乎太容易:)。 – nhwilly

+0

實際上,我每次都會獲得新的訪問令牌,並且他們最終會以憑據形式結束。完善。謝謝,阿德里安! – nhwilly