2012-10-25 11 views
10

Budujemy ServiceStack API, który będzie używać uwierzytelniania podstawowego. Mam obecnie konfigurowania uwierzytelniania w moim AppHost następująco:Gdy uwierzytelnianie ServiceStack nie powiedzie się, nie przekierowuj?

var authDb = new OrmLiteConnectionFactory("Server=(...);", true, MySqlDialectProvider.Instance); 

var authRepo = new OrmLiteAuthRepository(authDb); 
authRepo.CreateMissingTables(); 
container.Register<ICacheClient>(c => new MemoryCacheClient()); 
container.Register<IUserAuthRepository>(c => authRepo); 

Plugins.Add(
    new AuthFeature(() => new AuthUserSession(), new IAuthProvider[] { new BasicAuthProvider() }) 
); 

Podczas żądania bez nagłówka Authorization lub niewłaściwej nazwy użytkownika + przekazać odpowiedź jest przekierowanie do /Account/Login.aspx?ReturnUrl= ...

Parital żądanie + odpowiedź przykład:

POST http://localhost:60278/reserve HTTP/1.1 

HTTP/1.1 302 Found 
Location: /Account/Login.aspx?ReturnUrl=%2freserve 
X-Powered-By: ServiceStack/3,924 Win32NT/.NET 

Czy istnieje sposób, aby odpowiedzieć tylko HTTP 401 Nieuprawnione lub HTTP 403 Forbidden?

Odpowiedz

22

Domyślnie AuthFeature ServiceStack będzie próbować przekierować do domyślnej ścieżki dla żądań Content-Type. Można to zmienić poprzez ustawienie ścieżki przekierowania w AuthFeature null:

Plugins.Add(new AuthFeature(...) { HtmlRedirect = null }); 

ten powróci do standardowego 401 UnAuthorized Response że inne treści Rodzaje dostać.

Po globalnie ustawiania HtmlRedirect NULL, można dodać go z powrotem na zasadzie ad hoc, np:

[Authenticate(HtmlRedirect="~/path/to/redirect/to")] 
+0

myślę, że musi być jakiś ASP.net rzeczy mylące mnie tutaj. Widziałem to w dokumentach i wypróbowałem HtmlRedirect = null, a poza tym używam app/json dla nagłówków Accept/Content-type. Przekierowanie to nie to samo co ty (~/login), ale /Account/Login.aspx. Przejdę przez mój global.aspx i inne rzeczy, powiem. Przyjmuję teraz twoją odpowiedź, ale jest to rozwiązanie, gdy SS jest poprawnie skonfigurowany. Dziękuję Ci! :) – Magge

+0

Tak, to było moje złe. Nadal miałem pliki .net Membership w moim Web.config, wydaje się, że zastępuje uwierzytelnianie SS. Działa jak urok po usunięciu go. – Magge

+0

Mam to! ... :) –

Powiązane problemy