기본적으로 ServiceStack은 권한 부여 전에 아무 것도 호출하지 않으면 http 상태 401을 반환합니다. 대신 http 상태 200과 내 DTO를 어떻게 반환합니까?ServiceStack에서 HTTP 401 응답을 변경하는 방법은 무엇입니까?
무언가를 무단 호출하려고하면 이상적으로 ResponseStatus 응용 프로그램에 부울 NeedAuth = true 플래그를 표시하고 싶습니다.
기본적으로 ServiceStack은 권한 부여 전에 아무 것도 호출하지 않으면 http 상태 401을 반환합니다. 대신 http 상태 200과 내 DTO를 어떻게 반환합니까?ServiceStack에서 HTTP 401 응답을 변경하는 방법은 무엇입니까?
무언가를 무단 호출하려고하면 이상적으로 ResponseStatus 응용 프로그램에 부울 NeedAuth = true 플래그를 표시하고 싶습니다.
나는 이전에 작성한 사용자 정의 AuthProvider를 수정했습니다. 내가 AuthResponse 확장 한
{
"NeedAuth": true
}
:
public class MyAuthResponse : AuthResponse
{
public bool? NeedAuth { get; set; }
}
그리고 내 사용자 지정으로 AuthProvider를 수정 지금은 인증 전에 아무것도 전화를 걸거나 잘못된 자격 증명을 제공하려고하면, 나는 HTTP 200 개 OK 상태 및이 응답을 얻을 CredentialsAuthProvider에서 상속 :
// This one is called when I call anything before authorization
public override void OnFailedAuthentication(IAuthSession session, ServiceStack.ServiceHost.IHttpRequest httpReq, ServiceStack.ServiceHost.IHttpResponse httpRes)
{
httpRes.StatusCode = (int)HttpStatusCode.OK;
var callback = httpReq.GetJsonpCallback();
var doJsonp = EndpointHost.Config.AllowJsonpRequests && !string.IsNullOrEmpty(callback);
var res = new MyAuthResponse() { NeedAuth = true };
if (doJsonp)
httpRes.WriteToResponse(httpReq, res, (callback + "(").ToUtf8Bytes(), ")".ToUtf8Bytes());
else
httpRes.WriteToResponse(httpReq, res);
}
// This one is called when I try to login
public override object Authenticate(IServiceBase authService, IAuthSession session, Auth request)
{
var userName = request.UserName;
var password = request.Password;
var res = new MyAuthResponse();
if (!LoginMatchesSession(session, userName))
{
authService.RemoveSession();
session = authService.GetSession();
}
if (TryAuthenticate(authService, userName, password))
{
if (session.UserAuthName == null)
session.UserAuthName = userName;
OnAuthenticated(authService, session, null, null);
res.UserName = userName;
res.SessionId = session.Id;
}
else
res.NeedAuth = true;
return res;
}
401은 응답에 기록되며 현재 실행 취소 할 방법이 없습니다. 특별한 요구 사항이있는 경우 기본 제공 인증 기능을 사용하지 않으려 고합니다.
당신이 원하는 것을 정확히 수행하는 고유 한 요청 필터를 만드십시오. 이것이 바로 기본 제공 Auth가 작동하는 방법입니다. 요청 필터 일뿐입니다.
좀 더 구체적으로 기본 인증 동작을 무시하기 위해 무엇을 변경해야합니까? 내장 기능을 재정의하는 가장 깨끗한 방법은 무엇입니까? – Savvkin
나는 ServiceStack의 인증을 사용하지 않고 자신 만의 인증을 제공한다고 말하고 있습니다. SS Auth Providers는 ServiceStack에서 분리되며 Request Filters로 생성되므로 쉽게 동일하게 수행 할 수 있습니다. – mythz