2017-04-06 32 views
0

我有一個以連續運行模式運行的Azure WebJob。主WebJob的過程可以運行很長一段時間,可能有幾個月,因爲它運行在連續模式。在WebJobs長時間運行的進程中正確運行ADAL的AuthenticationContext生命週期管理

我喜歡在過程中確認實例化AuthenticationContext的正確方法。

  • 選項1:實例化AuthenticationContext的一個實例在Main()方法和使用它的WebJob過程的持續時間 - 可以是幾個月

  • 選項2:在任何需要一種OAUTH無記名標記實例化AuthenticationContext的一個實例並獲取該標記。

我想使用選項1.但我想確認我的方法在這裏。 此問題也適用於Windows服務場景。

回答

0

與其他庫一起開發Active Directory認證庫沒有區別。

兩個選項都應該可以工作,這取決於您的要求。例如,如果使用option1,那麼該對象將始終在內存中。如果你使用option2,因爲它會在每次需要時初始化實例,所以它可能比option1慢一點。在正常的環境下,這兩種選擇幾乎沒有區別。

您可以測試自己,看看您是否可以接受哪一個。

+0

每次實例化一個AuthenticationContext時,Option2都會通過REST調用產生一個通過REST調用獲取Berear令牌的高額費用。通過選項1,AuthenticationContext緩存了Berear令牌並相當有效地處理了刷新令牌場景。我對麼? –

+0

是的,option2每次都會通過HTTP請求獲取訪問令牌,因爲每次都會創建一個'AuthenticationContext'實例。 –

+0

基於我的理解,如果您使用**客戶端憑據流**,庫將無法幫助我們刷新訪問令牌,因爲在此場景中沒有刷新令牌。它會緩存訪問令牌,但在這種情況下,您可以在調用AcquireTokenAsync(字符串資源,ClientCredential clientCredential)後獲取訪問令牌,然後我們可以直接使用此訪問令牌。訪問令牌過期後,我們可以調用該方法來檢索新的訪問令牌。 –