当自定义凭据 auth provider 的身份验证失败时返回自定义 HTTP 响应代码
Returning a custom HTTP response code when the authentication fails for a custom credentials auth provider
我知道我可以 return 使用自定义身份验证提供程序时的自定义响应,如下面的代码:
Return a custom auth response object from ServiceStack authentication
我只是想知道是否有办法 return 自定义 HTTP 响应代码。
例如,当身份验证失败时,我想发送另一个 HTTP 响应代码来提供有关失败原因的更多详细信息,而不是 401 未经授权的错误。例如,当账户被锁定时,我会发送错误代码 XYZ!
public class MyCredentialsAuthProvider : CredentialsAuthProvider
{
public override object Authenticate(ServiceStack.ServiceInterface.IServiceBase authService, IAuthSession session, Auth request)
{
//let normal authentication happen
var authResponse = (AuthResponse)base.Authenticate(authService, session, request);
//return your own class, but take neccessary data from AuthResponse
return new
{
UserName = authResponse.UserName,
SessionId = authResponse.SessionId,
ReferrerUrl = authResponse.ReferrerUrl,
SessionExpires = DateTime.Now
};
}
}
在 try catch 中,我找到了一种在该函数中 return 自定义 HTTP 代码的方法。
我以return为例:
return new ServiceStack.HttpError(423, "Locked");
我不确定这是不是正确的方法
您可以 return 一个错误响应(如 HttpError)到 return 一个自定义错误,但是为了成功响应,您应该 return AuthenticateResponse
类型,因为这就是所有 clients/service 消费者都在期待(以及其他 AuthResponse 过滤器和装饰器)。如果您想 return 在您的 AuthenticateResponse
中添加更多信息,您应该 return 在其 Meta
词典 属性.
中添加它们
我知道我可以 return 使用自定义身份验证提供程序时的自定义响应,如下面的代码:
Return a custom auth response object from ServiceStack authentication
我只是想知道是否有办法 return 自定义 HTTP 响应代码。
例如,当身份验证失败时,我想发送另一个 HTTP 响应代码来提供有关失败原因的更多详细信息,而不是 401 未经授权的错误。例如,当账户被锁定时,我会发送错误代码 XYZ!
public class MyCredentialsAuthProvider : CredentialsAuthProvider
{
public override object Authenticate(ServiceStack.ServiceInterface.IServiceBase authService, IAuthSession session, Auth request)
{
//let normal authentication happen
var authResponse = (AuthResponse)base.Authenticate(authService, session, request);
//return your own class, but take neccessary data from AuthResponse
return new
{
UserName = authResponse.UserName,
SessionId = authResponse.SessionId,
ReferrerUrl = authResponse.ReferrerUrl,
SessionExpires = DateTime.Now
};
}
}
在 try catch 中,我找到了一种在该函数中 return 自定义 HTTP 代码的方法。 我以return为例:
return new ServiceStack.HttpError(423, "Locked");
我不确定这是不是正确的方法
您可以 return 一个错误响应(如 HttpError)到 return 一个自定义错误,但是为了成功响应,您应该 return AuthenticateResponse
类型,因为这就是所有 clients/service 消费者都在期待(以及其他 AuthResponse 过滤器和装饰器)。如果您想 return 在您的 AuthenticateResponse
中添加更多信息,您应该 return 在其 Meta
词典 属性.