2012-10-25 6 views
10

우리는 기본 인증을 사용하는 ServiceStack API를 구축하고 있습니다. ServiceStack 인증에 실패하면 리디렉션하지 마십시오.

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

이 /Account/Login.aspx?ReturnUrl=에 리디렉션을 권한 부여 헤더 또는 잘못된 사용자 이름 + 응답을 통과와 요청을한다 수행 할 때 다음과 같이 나는 현재 내 AppHost의 인증을 설정 한 ...

Parital 요청 + 응답 예 :

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 

무단 또는 HTTP 403 (401)을 금지는 단지 HTTP 응답 만들 수있는 방법이 있나요?

답변

22

기본적으로 ServiceStack의 AuthFeature는 Content-Type 요청에 대해 ~/login 경로로 리디렉션하려고 시도합니다. 당신은 null로 AuthFeature에 리디렉션 경로를 설정하여이를 대체 할 수 있습니다 : 이것은 다른 콘텐츠 유형 얻을 표준 401 UnAuthorized 응답에 다시 떨어질 것이다

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

.

세계적으로 null로 HtmlRedirect를 설정 한 후, 당신은 예컨대, 애드혹으로 다시 추가 할 수 있습니다

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

내가 여기 나를 혼란 약간의 ASP.net 물건이 있어야합니다 생각합니다. 나는 그것을 워드 프로세서에서 보았고 HtmlRedirect = null을 시도했으며 게다가 Accept/Content-type 헤더에 application/json을 사용하고있다. 리다이렉트는 글쓰기와 같지 않습니다 (~/login), /Account/Login.aspx. 내 global.aspx를 통해 갈 것입니다. 지금 답변을 수락하고 있지만 SS가 제대로 설정된 경우 해결 방법입니다. 고맙습니다! :) – Magge

+0

예, 이것은 나빴습니다. 나는 여전히 Web.config에 .net Membership 항목이 있는데 SS 인증을 무시하는 것 같습니다. 내가 그것을 제거한 후 매력처럼 작동합니다. – Magge

+0

나는 그것을 얻었다! ... :) –

관련 문제