当自定义凭据 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 词典 属性.

中添加它们