2015-09-16 72 views
1

我有此Windows控制檯應用程序試圖針對ADFS執行Windows身份驗證。我已經能夠使用用戶名/密碼進行身份驗證,但我不想這樣做,因爲用戶已經在Windows中進行身份驗證。在獨立應用程序上使用ADFS進行Windows身份驗證

我有這樣的代碼:

 //Setup the connection to ADFS 

     const string adfsEndpoint = "https://iis.dev.lab/adfs/services/trust/13/windowsmixed"; 

     var factory = new WSTrustChannelFactory(new WindowsWSTrustBinding(SecurityMode.TransportWithMessageCredential), new EndpointAddress(adfsEndpoint)) 
     { 
      TrustVersion = TrustVersion.WSTrust13 
     }; 

     //Setup the request object 
     var rst = new RequestSecurityToken 
     { 
      RequestType = RequestTypes.Issue, 
      KeyType = KeyTypes.Bearer, 
      AppliesTo = new EndpointReference(relyingPartyId) 
     }; 

     //Open a connection to ADFS and get a token for the logged in user 
     var channel = factory.CreateChannel(); 

     var genericToken = channel.Issue(rst) as GenericXmlSecurityToken; 

,當它試圖獲得令牌。我有這樣的例外:

安全支持提供程序接口(SSPI)身份驗證失敗。 ser 版可能未運行在身份爲「host/iis.dev.lab」的帳戶中。如果se rver正在服務帳戶(例如,網絡服務)中運行,請指定 帳戶的ServicePrincipalName作爲se rver的EndpointAddress中的標識。如果服務器在用戶帳戶中運行,請將該帳戶的UserPrin cipalName指定爲該服務器的EndpointAddress中的標識。

的事情是:

  • 用戶已經通過身份驗證的dev.lab
  • ADSF服務管理員用戶帳戶下運行在dev.lab
  • 在錯誤消息中我有域名iis.dev.lab由於某種原因,可能是原因..

問題:

  1. 我應該使用這個網址( 「../adfs/services/trust/13/ windowsmixed」)來執行這種認證的?或者我應該使用kerberosmixed?有人可以指出一些關於ADFS中可用服務目標的文檔嗎?
  2. 有沒有辦法在提出請求之前設置用戶的域名?我試過這個factory.Credentials.Windows.ClientCredential.Domain = "dev.lab";但它沒有解決。
  3. 即使進行auth驗證,我是否還需要定義憑據?像這樣的例子:factory.Credentials.Windows.ClientCredential = CredentialCache.DefaultNetworkCredentials;

任何幫助表示讚賞。

+0

除非您的域名已啓用Kerberos,否則您將需要使用Windows端點。 –

回答

3

因此,此錯誤消息的「可能」原因是您可能有ADFS配置不正確。

在這裏尋找一個SPN的定義:https://msdn.microsoft.com/en-us/library/ms677949(v=vs.85).aspx

要解決這一點,你要麼需要在ADFS服務帳戶或服務器本身設置SPN。

SETSPN -A HTTP/DOMAIN/SERVICENAME

SETSPN -A HTTP/{THE ADFS服務器的URL} COMPUTERNAME

,然後重新啓動ADFS服務{THE ADFS服務器的URL}。關於服務帳戶的一個注意事項是,如果您正在使用網絡或系統帳戶運行,那麼您仍然需要使用計算機名稱,因爲這些帳戶是本地服務器帳戶。例如,如果你有iis.dev.lab的ADFS網址,然後你這樣做:

SETSPN -A HTTP/IIS.DEV.LAB ADFSServer

而且 - 測試您的ADFS設置:https://iis.dev.lab/adfs/ls/IdpInitiatedSignon.aspx

+0

我已經這樣做了,但是我必須缺少一些東西,因爲在安裝了ADFS的機器上,我的應用程序可以正常工作,但在同一個域中的另一臺機器上,使用相同的憑據連接,我仍然有上面的錯誤消息。 – user2457870

0

當我正在尋找同一問題的答案時,只是st across了這個問題。

我勉強做來解決我的問題如下:

 EndpointIdentity identity = new SpnEndpointIdentity("your spn"); 

     //Setup the connection to ADFS 
     var factory = new WSTrustChannelFactory(new WindowsWSTrustBinding(SecurityMode.TransportWithMessageCredential), new EndpointAddress(new Uri(adfsEndpoint), identity)) 
     { 
      TrustVersion = TrustVersion.WSTrust13 
     }; 

注意,端點地址現在是一個URI,和我沿着我的服務帳戶的SPN身份解析。

相關問題