2012-10-09 36 views
2

我無法使用SS認證與Umbraco安裝一起工作。每當我使用Authenticate屬性訪問DTO或服務時,我都會重定向到umbraco登錄。 要重現: 我創建了一個新項目,並從Nuget安裝了Umbraco(嘗試使用4.7.1,4.8.1和4.9.0,結果相同),並從Nuget安裝了SS。我安裝SS在web.config中/ API路徑下運行:如何讓服務堆認證在Umbraco安裝中工作

<location path="api"> 
    <system.web> 
     <httpHandlers> 
     <add path="*" type="ServiceStack.WebHost.Endpoints.ServiceStackHttpHandlerFactory, ServiceStack" verb="*" /> 
     </httpHandlers> 
    </system.web> 
    <!-- Required for IIS 7.0 --> 
    <system.webServer> 
     <modules runAllManagedModulesForAllRequests="true" /> 
     <validation validateIntegratedModeConfiguration="false" /> 
     <handlers> 
     <add path="*" name="ServiceStack.Factory" type="ServiceStack.WebHost.Endpoints.ServiceStackHttpHandlerFactory, ServiceStack" verb="*" preCondition="integratedMode" resourceType="Unspecified" allowPathInfo="true" /> 
     </handlers> 
    </system.webServer> 
    </location> 

,並添加/ api來保留路徑,以避免一把umbraco處理這樣的:

<add key="umbracoReservedPaths" value="~/umbraco,~/install/,~/api" /> 

而在AppHost.cs我「已經改變了啓用EndpointHostConfig和認證:

SetConfig(new EndpointHostConfig 
    { 
     DebugMode = true, //Show StackTraces when developing 
     ServiceStackHandlerFactoryPath = "api" 
    }); 

//Enable Authentication 
ConfigureAuth(container); 

而且我已經改變了的ConnectionString在ConfigureAuth使用一把umbraco數據庫:

var connectionString = ConfigurationManager.AppSettings["umbracoDbDSN"]; 

最後,我設置的HelloWorldService屬性:我重定向到

http://localhost:56835/api/hello 

,並馬上:

http://localhost:56835/apilogin?redirect=http%3a%2f%2flocalhost%3a56835%2fapi%2fhello 

[Authenticate] 
public class HelloService : ServiceBase<Hello> 
{ 
    protected override object Run(Hello request) 
    { 
     return new HelloResponse { Result = "Hello, " + request.Name }; 
    } 
} 

我再通過REST烏里訪問了HelloWorldService

並呈現默認的Umbraco 404頁面,這意味着SS突然ly讓Umbraco處理認證。如果我刪除了Authenticate屬性,SS將完美地處理請求。

我錯過了什麼?

+0

我發現,它只是部分Umbraco的錯。重定向的主要原因是,當SS返回401時,不是將THAT響應返回給客戶端,而是web.config中的部分將客戶端重定向到登錄頁面。我甚至試圖刪除部分,但沒有運氣。我如何防止IIS抓取該響應? – BoKDamgaard

+0

更多信息。這是因爲Umbraco需要這條線 '' 。 – BoKDamgaard

+0

我需要找出在部分禁用該功能,我已經試過沒有運氣添加此 '<位置路徑=「API」有的allowOverride =「假」> <授權> <允許用戶=「* 「/> <! - 必需的IIS 7.0 - > <模塊runAllManagedModulesForAllRequests = 「真」> <除去名稱= 「FormsAuthentication」/> ' – BoKDamgaard

回答

0

似乎FormsAuthentication只是簡單的煩人,當它發現一個401它將其更改爲302 login.aspx。 我的溶液中使用使用想法從這個鏈接:

if (response.StatusCode == 401 && request.RawUrl.ToLower().StartsWith("/api")) 
http://haacked.com/archive/2011/10/04/prevent-forms-authentication-login-page-redirect-when-you-donrsquot-want.aspx

總之它恢復從FormsAuthentication的401-> 302變回401 我改變了它的檢測代碼有點

並刪除了註冊並在web.config中的FormsAuthentication模塊後手動添加它