2017-02-03 136 views
1

我正在使用endpoint/oauth2 /令牌從Azure Active Directory請求(通過HTTP POST)授權承載令牌。 AAD內的所有設置都正常,以註冊使用此流程檢索此令牌的Web客戶端。使用client_id和client_secret(共享對稱密鑰),並且我成功地獲取包含用於身份驗證的jwt承載標記的json響應。使用Azure Active Directory客戶端憑證流控制授權令牌的過期

我想了解的是知道如何配置超過1小時過期的令牌到期,這似乎是我通過此POST請求獲取的令牌。我在Azure AD經典門戶中生成的共享密鑰有2年過期。但是,返回的令牌有1小時到期。

基於此,我假設此流程的工作方式(至少就AAD而言)是因爲我們的Web客戶端需要安排自己重新發布請求以獲得新的認證令牌1小時的時間範圍,以確保用於由Web客戶端進行認證的REST調用的認證令牌的新鮮度。我想如果先前發出的令牌失敗,然後發出新的請求(這只是實現細節......),它也可能捕獲異常。

這是保持爲此流刷新授權令牌的正常方法嗎? 我知道,對於大多數其他流程,會生成一個刷新令牌,並且可以完成OAuth「跳舞」以保持身份驗證令牌有效。 ADAL很好地提取所有這些細節,但在這種情況下,我正在使用客戶端憑證流並使用HTTP POST請求發送到oauth2/token端點,並且在此流程中(根據OAuth2 RFC)沒有提供刷新令牌。 ]

我曾經假設也許有可能在OAuth令牌上配置更長的到期時間,甚至可能是這個服務器/服務器機密客戶端場景的無限制令牌。 這是否可以在Azure AD設置中使用?

鏈接在Azure AD token lifetime config的文檔表明生命週期是可配置的。

回答

1

在最後一個到期之前獲取新令牌的一種簡單方法是隻跟蹤它何時到期。所以後來每當你獲取一個令牌HTTP調用:

  1. 如果我們沒有一個令牌,獲得一個
  2. 如果到期時間越來越近,得到一個新的
  3. 不管是什麼,返回高速緩存的令牌或新令牌

確實可以根據鏈接的每個文檔爲每個服務主體,應用程序或組織配置生命週期。所以如果你願意的話,你應該能夠延長你的訪問令牌的生命週期到1天。

我確認你確實可以在Azure AD的免費層上延長訪問令牌到期時間。關於documentation page的免責聲明確實表示某些功能在未來可能需要Premium。並沒有真正說出:/

你需要Azure AD v2 PowerShell cmdlets來做到這一點。一對夫婦的命令就足夠了:

Connect-AzureAD 
# Create new policy in Azure AD 
New-AzureADPolicy -Definition @("{`"TokenLifetimePolicy`":{`"Version`":1,`"AccessTokenLifetime`":`"03:00:00`"}}") -DisplayName ThreeHourTokenPolicy -IsOrganizationDefault $false -Type TokenLifetimePolicy 
# Apply on Graph API's service principal in my directory 
Add-AzureADServicePrincipalPolicy -ObjectId ad17cfce-f2fd-4b3e-91f5-aa0a82e94012 -RefObjectId 640f76ea-6ef6-40c8-8ed5-178a76e7e762 

您必須找出服務主體的對象ID是用於Graph API將其設置爲僅用於從那裏獲取令牌。或者,您可以在第二次調用中設置-IsOrganizationDefault $true,並完全排除第三個,使得該策略適用於所有服務主體和應用程序,除非他們有更具體的策略。

有天青AD沒有無限期訪問令牌,但你可以到撤銷的刷新令牌生存期設置爲

+0

在該文件(現在1歲以上),我掛好像配置令牌訪問壽命的該特徵的第二讀數在AAD公開預覽,當它超越可能是容易被限制在AAD高級預覽階段。感謝您澄清沒有無限制的標記。任何想法,如果這個功能現在已經成爲免費AAD層的一部分? – retail3r

+0

它可以在免費套餐上使用,但我不能說它是否會保持這種狀態。用示例更新答案。 – juunas

+0

Juunas - 非常感謝您提供的示例 - Powershell cmdlet等 – retail3r

相關問題