2012-10-25 42 views
10

Chúng tôi đang xây dựng một API ServiceStack sẽ sử dụng Xác thực cơ bản. Tôi hiện đã thiết lập auth trong AppHost của tôi như sau:Khi xác thực ServiceStack không thành công, không chuyển hướng?

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() }) 
); 

Khi thực hiện một yêu cầu không có tiêu đề ủy quyền hoặc tên người dùng sai + vượt qua phản ứng là một chuyển hướng để /Account/Login.aspx?ReturnUrl= ...

Parital yêu cầu + phản ứng Ví dụ:

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 

có cách nào để làm cho nó đáp ứng với chỉ một HTTP 401 Unauthorized hoặc HTTP 403 Forbidden?

Trả lời

22

Theo mặc định, tính năng Tự động sửa lỗi của ServiceStack sẽ chỉ cố chuyển hướng bạn đến đường dẫn mặc định ~/login mặc định cho HTML yêu cầu loại nội dung. Bạn có thể ghi đè lên điều này bằng cách thiết lập các con đường chuyển hướng trong AuthFeature để null:

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

này sẽ rơi trở lại để chuẩn 401 UnAuthorized Phản hồi Content-Các loại khác có được.

Sau khi thiết lập trên toàn cầu các HtmlRedirect để null, bạn có thể thêm nó trở lại trên cơ sở Adhoc, ví dụ:

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

tôi nghĩ rằng phải có một số công cụ ASP.net khó hiểu cho tôi đây. Tôi đã nhìn thấy nó trong các tài liệu và thử HtmlRedirect = null và bên cạnh đó tôi đang sử dụng ứng dụng/json cho Accept/Content-type tiêu đề. Chuyển hướng không giống như bạn viết (~/login), nhưng /Account/Login.aspx. Tôi sẽ đi qua global.aspx của tôi và các công cụ, cho bạn biết. Hiện tại, tôi chấp nhận câu trả lời của bạn, đó là giải pháp khi SS được thiết lập chính xác. Cảm ơn bạn! :) – Magge

+0

Vâng, đây là điều xấu của tôi. Tôi vẫn có các thành phần .net trong Web.config của tôi, có vẻ như nó ghi đè xác thực SS. Làm việc như một say mê sau khi tôi gỡ bỏ nó. – Magge

+0

Tôi hiểu rồi! ... :) –

Các vấn đề liên quan