我正在嘗試編寫一個WPF客戶端,它使用ADAL在Windows Server 2012 R2上針對ADFS進行身份驗證。我已經使用「表單身份驗證」成功實現了這一點,其中提示用戶輸入域用戶名和密碼。但是,我想利用SSO並使用當前登錄的域用戶對ADFS進行身份驗證。SSO從WPF客戶端ADAL到Windows Server 2012 R2 ADFS 3.0
不幸的是,我只得到一個錯誤消息說:
此方法重載不支持「< ADFS服務器名稱>」
我已經做了很多的搜索,但找到一些矛盾的信息:
這個SO發佈Windows應用程序的應用程序(與WPF的任何區別?)在哪裏維托裏奧Bertocci鏈接到博客如何實現它: ADAL for Windows Store SSO
這SO張貼在那裏維托裏奧Bertocci聲稱無聲認證是唯一可能與Windows Server 2016 Authenticate with ADFS inside Console App silently
它是一個事實, Windows Server 2016需要與ADAL一起執行SSO? 有沒有其他方法可以做到這一點?
編輯:授權服務器不支持:
升級到ADAL(3.9.302111717-α),我發現了更詳細的錯誤信息
MSIS9611的最新阿爾法後請求的'grant_type'。授權服務器僅支持授權類型爲'authorization_code'或'refresh_token'。
我執行的代碼是這樣的:
string authority = "https://myServer.com/adfs";
string resourceURI = "http://myApp/";
string clientId = "XXXX-XXX-XXXX-XXXX-XXXXX";
string clientReturnUri = "http://anarbitraryreturnuri/";
var ac = new AuthenticationContext(authority, false);
var token = await ac.AcquireTokenAsync(resourceURI, clientId,new UserCredential());
我是能夠實現使用WS-信託基金工作方案,所以我相信,我的機器上運行有隱私設置以使應用程序能夠找到當前登錄的用戶。
而且,我的全球認證策略設置是這樣的:
謝謝,@vibronet。不過,我仍然有問題。我已經更新了我的帖子,提供更多信息。你能看到任何可能成爲我的問題根源的東西嗎? –
現在我明白你的情況會更好,謝謝你的額外細節。使用Windows Server 2012 R2時,該方法不會直接針對ADFS工作 - 只有在ADFS與Azure AD聯合時才能使用。如果你想堅持2012,你需要調用AcquireToken,就像使用表單驗證一樣 - 但使用PromptBehavior.Never。 *來自內部網*由於它使用應直接針對Kerberos端點進行身份驗證的隱形瀏覽器,因此此收集會導致SSO。 – vibronet
再次感謝。更改爲使用Promptbehavior.Never給出「請求的資源需要用戶身份驗證」。 Promptbehavior.Auto彈出Windows安全登錄,但在登錄Adal後失敗,並且由於語法無效,請求無法由服務器處理。 我懷疑我的ADFS配置可能關閉,這是我第一次設置它。 –