我正在嘗試將我們的應用程序與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失敗。
@nzpcmd感謝,這是一個普通的AD ADFS情況下,AAD是不是在圖片作爲我的職位,我可以用userPasswordCredential正確驗證說爲同一個用戶。 userCredential發生問題。 – amritanshu
因爲我不能編輯以前的內容,所以更多的是它似乎adal自動提取表單身份驗證,並沒有真正使用Windows身份驗證。在ADFS中,當我禁用窗體身份驗證時(Windows身份驗證是唯一的方式)UserPasswordCredential也停止工作。 – amritanshu