2012-08-02 13 views
0

我目前正在調查WCF實現將通過IIS運行的RESTful服務。 目前我們的軟件提供了對存儲在數據庫中無法使用webHttpBinding獲取在WCF RESTful服務中工作的自定義身份驗證

  • 一個指定的Windows活動目錄,如果認證 成功的地方,查找

    1. 我們自己內部的用戶帳戶各種渠道驗證用戶身份的能力做是爲了找到其內部帳戶 WINOWS之一與

    2. 另一個LDAP服務器如Novell公司

    所以我希望這樣工作的方式是客戶端通過SSL發送帶有 身份驗證標頭(現在基本)的http請求,然後該服務將使用自定義 身份驗證來實現上述過程。

    就目前而言,我自託管服務,並試圖讓自定義的認證 例如工作,它是否正確啓動了,但我得到的,當我嘗試從瀏覽器 或工具提出請求我在哪裏可以附加身份驗證標頭爲

    「錯誤101(net :: ERR_CONNECTION_RESET):連接已重置。」

    我已經在自定義認證類中設置了一個斷點,它永遠不會到達,所以我猜測它是 配置的問題。

    我的app.config;

    <configuration> 
    
    ... 
    
    <system.serviceModel> 
    
        <bindings> 
         <webHttpBinding> 
          <binding name="secure"> 
           <security mode="Transport"> 
            <transport clientCredentialType="Basic"></transport> 
           </security> 
          </binding> 
         </webHttpBinding> 
        </bindings> 
    
        <services> 
        <service name="CELCAT.RegisterMarker.RegisterMarker" behaviorConfiguration="myServiceBehavior"> 
         <endpoint address="https://mymachine:8001/servicename" 
           binding="webHttpBinding" 
           bindingConfiguration="secure" 
           contract="myServiceContract" /> 
        </service> 
        </services> 
    
        <behaviors> 
        <serviceBehaviors> 
         <behavior name="myServiceBehavior"> 
         <serviceMetadata httpGetEnabled="True"/> 
         <serviceDebug includeExceptionDetailInFaults="True"/> 
          <serviceAuthorization serviceAuthorizationManagerType="MyServiceAuthorizationManager, authenticatonassembly" /> 
    
          <serviceCredentials> 
           <userNameAuthentication userNamePasswordValidationMode="Custom" 
                 customUserNamePasswordValidatorType="servicenamespace, serviceassembly" /> 
    
           <serviceCertificate findValue="certname" 
                storeLocation="LocalMachine" 
                storeName="My" 
                x509FindType="FindBySubjectName" /> 
          </serviceCredentials> 
         </behavior> 
        </serviceBehaviors> 
        </behaviors> 
    
    </system.serviceModel> 
    </configuration> 
    

    我看過一個貼子,說什麼,我試圖做的是不可能的開箱與WCF 並實現這一點,我需要編寫自定義模塊或者按照下面的描述請求攔截器;

    通過自定義模塊進行驗證; http://custombasicauth.codeplex.com/

    通過請求攔截器進行身份驗證; http://www.codeproject.com/KB/WCF/BasicAuthWCFRest.aspx

    這似乎應該是可能的我,所以我的問題是

    1. 正是我試圖做可能嗎?
    2. 如果是這樣,我錯了什麼?或者如果不是,哪種解決方法最好?
  • +0

    你能分享一下IIS配置嗎?我假設你已經設置了SSL,並且除了匿名之外,網站上的所有認證方法都被禁用了? – 2012-08-02 13:45:51

    +0

    我還沒有在IIS中嘗試過這種配置。目前我自己託管服務,所以我可以調試自定義身份驗證類。如果我能得到這個配置工作,我想我將不得不允許匿名身份驗證並堅持SSL? – 2012-08-02 14:50:01

    +0

    如果您的綁定設置爲強制傳輸安全,並且未配置SSL,則它將拒絕連接。 – 2012-08-02 17:22:56

    回答

    2

    確實經過多少谷歌搜索和安德魯教堂的提示(謝謝安德魯)我已經知道了這一點。

    問題是雖然我生成了一個證書,但我沒有將它綁定到一個端口。幫助生成證書和綁定證書的步驟可以在以下網址找到:

    http://www.codeproject.com/Articles/24027/SSL-with-Self-hosted-WCF-Service

    然而,這要求你使用httpcfg,此工具無法在Windows Vista或Windows 7(我的操作系統)存在,因此進一步透露谷歌這篇文章;

    http://msdn.microsoft.com/en-us/library/ms733791.aspx

    它告訴我使用netsh的,完美!不太好,因爲這需要一個名爲appid的參數,我不知道我在哪裏可以找到這個,所以進一步的搜索引導回到這裏;

    What appid should I use with netsh.exe?

    所以我遵循了所有的步驟,註釋掉我的app.config證書部分和變戲法似的,我打我的斷點在自定義配置。

    希望這可以幫助其他人有相同的問題

    +1

    只是後續行動,這隻適用於自我託管時,它將無法工作時,在IIS中託管 – 2012-08-21 19:28:00

    0

    我不確定這是否可行,但我過去所做的是使用自定義HTTP模塊。我們的API使用訪問令牌,因此我們使用該模塊檢查標題是否存在令牌,如果它不存在,我們將重定向到api中的認證端點。端點期望基本認證。希望這可以幫助。

    +0

    嗨安德魯,它不是我正在測試的授權管理器,工作正常。我的問題是自定義AUTHENTICATION類。我確實認爲我也可以使用授權來進行身份驗證,但根據我所看到的以及我在MSDN中讀到的內容,用戶信息在那裏不可用(我承認我可能錯了那) – 2012-08-03 09:23:35

    +0

    啊我道歉,我誤讀了。 – 2012-08-03 12:49:36