2017-09-04 119 views
0

我正在嘗試將我們的應用程序與ADFS和Web API在用戶上下文中運行的常規.net桌面服務集成。用戶是域用戶,這是一個常規的AD環境。該網站的MVC方面與瀏覽器運行良好。ADFS單一登錄登錄用戶無法正常工作

我在ADAL3(VS2017),Windows服務器2016年,我提到這個鏈接[ADFS SSO CloudIdentity]我能夠使用UserCredentialPassword成功地獲取一個令牌並調用我的Web API,我只是按照步驟並將其改爲異步。

但是使用登錄憑據位,其中一個new UserCredential()應指示來電擺脫當前線程的令牌不爲我在所有的工作,在ADAL 2,我得到空指針異常和ADAL3我得到

MSIS7065:有路徑上沒有註冊的協議處理程序/ ADFS /的oauth2 /令牌來處理傳入的請求。

我沒有看到左右,但根據我的理解有回落的基於瀏覽器的行爲OP類似查詢。

基於瀏覽器的認證(基於Promptbehaviour.never)的行爲的後退是不受歡迎的,因爲我看到很多客戶站點上的配置問題,即使啓用了相關設置,瀏覽器也假設它是一個互聯網站點,登錄失敗。

代碼參考

string authority = "https://adfs.domain.com/adfs"; 
string resourceURI = "https://local.ip:44325"; 
string clientID = "19cda707-b1bf-48a1-b4ac-a7df00e1a689"; 
AuthenticationContext ac = new AuthenticationContext(authority, false); 
// I expect that the user's credential are picked up here. 
AuthenticationResult authResult = 
    await ac.AcquireTokenAsync(resourceURI, clientID, 
           new UserCredential()); 
string authHeader = authResult.CreateAuthorizationHeader(); 
var client = new HttpClient(); 
var request = new HttpRequestMessage(HttpMethod.Get, 
         "https://local.ip:44325/api/values"); 
request.Headers.TryAddWithoutValidation("Authorization", authHeader); 
var response = await client.SendAsync(request); 
string responseString = await response.Content.ReadAsStringAsync(); 

的呼叫acquiretokenasync失敗。

回答

0

你有沒有違反任何約束的描述here

而且,類似的問題here周圍ADAL V3.0和UserCredential支持。

在上面的鏈接中,RP是使用PowerShell創建的。你確定你有正確的ADFS 4.0配置的應用程序 - clientID的等

+0

@nzpcmd感謝,這是一個普通的AD ADFS情況下,AAD是不是在圖片作爲我的職位,我可以用userPasswordCredential正確驗證說爲同一個用戶。 userCredential發生問題。 – amritanshu

+0

因爲我不能編輯以前的內容,所以更多的是它似乎adal自動提取表單身份驗證,並沒有真正使用Windows身份驗證。在ADFS中,當我禁用窗體身份驗證時(Windows身份驗證是唯一的方式)UserPasswordCredential也停止工作。 – amritanshu