2016-02-15 103 views
1

我正在嘗試編寫一個WPF客戶端,它使用ADAL在Windows Server 2012 R2上針對ADFS進行身份驗證。我已經使用「表單身份驗證」成功實現了這一點,其中提示用戶輸入域用戶名和密碼。但是,我想利用SSO並使用當前登錄的域用戶對ADFS進行身份驗證。SSO從WPF客戶端ADAL到Windows Server 2012 R2 ADFS 3.0

不幸的是,我只得到一個錯誤消息說:

此方法重載不支持「< ADFS服務器名稱>」

我已經做了很多的搜索,但找到一些矛盾的信息:

它是一個事實, 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-信託基金工作方案,所以我相信,我的機器上運行有隱私設置以使應用程序能夠找到當前登錄的用戶。

的OAuth2用戶端點如下所示: OAuth2 endpoint configuration

而且,我的全球認證策略設置是這樣的:

Global Authentication Policy settings

回答

1

的Windows Server 2016,才需要輸入密碼格蘭特 - 中您提供原始用戶名和密碼。您的問題似乎表明您希望使用當前登錄的用戶登錄,而不是使用Kerberos。 基於Kerberos的身份驗證應與ADFS「3」和ADFS 2016無差別地工作 - 只要您的客戶端連接到域網絡,本地計算機就沒有隱私設置,以防止您的應用找到當前登錄的域用戶,在ADFS實例上啓用正確的端點。

+0

謝謝,@vibronet。不過,我仍然有問題。我已經更新了我的帖子,提供更多信息。你能看到任何可能成爲我的問題根源的東西嗎? –

+0

現在我明白你的情況會更好,謝謝你的額外細節。使用Windows Server 2012 R2時,該方法不會直接針對ADFS工作 - 只有在ADFS與Azure AD聯合時才能使用。如果你想堅持2012,你需要調用AcquireToken,就像使用表單驗證一樣 - 但使用PromptBehavior.Never。 *來自內部網*由於它使用應直接針對Kerberos端點進行身份驗證的隱形瀏覽器,因此此收集會導致SSO。 – vibronet

+0

再次感謝。更改爲使用Promptbehavior.Never給出「請求的資源需要用戶身份驗證」。 Promptbehavior.Auto彈出Windows安全登錄,但在登錄Adal後失敗,並且由於語法無效,請求無法由服務器處理。 我懷疑我的ADFS配置可能關閉,這是我第一次設置它。 –

相關問題