2015-10-05 43 views
0

我有一個WCF服務,需要最終獲得一個令牌來與Azure託管的Web API服務對話。我們的前提Active Directory與我們的Azure賬戶同步。Azure活動目錄授權碼

起初我曾在一個雙贏的形式應用戲,有一個令牌成功地利用了以下內容:

AuthenticationResult authResult = authContext.AcquireToken(apiResourceId, clientId, redirectUri); 

這雖然彈出的登錄對話框,所以不是一個窗口服務多大用處。然後我調查了AcquireTokenSilent()的使用。然而,這一直拋出一個例外,告訴我打電話AcquireToken回到原點1.

我的下一個端口是看AcquireTokenByAuthorizationCode()。我的問題是,如何獲得第一個參數的授權碼。

我已經試過:

var url = authContext.GetAuthorizationRequestURL(apiResourceId, clientId, redirectUri, UserIdentifier.AnyUser, string.Empty); 

HttpClient hc = new HttpClient(); 
HttpResponseMessage hrm = hc.GetAsync(url).Result; 

這雖然只是返回一個HTML頁面的表現,我認爲微軟的登錄頁面。它當然不包含任何代碼。

關於我在做什麼的錯誤?

回答

1

AcquireTokenSilent只有在緩存中已經有令牌時纔有效,但情況並非如此。 AcquireTokenByAuthorizationCode應該在服務器端被起訴。 https://github.com/Azure-Samples/active-directory-dotnet-native-headless中顯示了您可以在客戶端沒有彈出對話框的情況下獲取令牌的主要方式,但有一些重要限制。如果他們在你的方案中工作的很好,否則你可能會考慮創建一個持久緩存,通過進行一次交互式身份驗證來啓動它,然後通過AcquireTokenSilent繼續使用服務中的相同緩存。只要至少每14天使用一次,緩存的刷新令牌就會持續90天。

+0

這是否意味着儘管每90天我必須執行另一次交互式身份驗證? – DasDave

+0

今天,是的。也就是說,我們正在研究控制刷新令牌持續時間的機制 - 這將允許您任意延長持續時間。雖然這個功能沒有ETA。 – vibronet

+0

樣本完美謝謝!你提到什麼限制? – DasDave