当自定义凭据身份验证提供程序的身份验证失败时,返回自定义HTTP响应代码

时间:2019-10-21 13:20:13

标签: c# servicestack

我知道当使用自定义身份验证提供程序(如以下代码)时,我可以返回自定义响应:

Return a custom auth response object from ServiceStack authentication

我只是想知道是否有一种方法可以返回自定义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
            };

    }
}

在一个尝试中,我找到了一种在该函数中返回自定义HTTP代码的方法。 例如,我返回:

return new ServiceStack.HttpError(423, "Locked");

我不确定这是否正确

1 个答案:

答案 0 :(得分:3)

您可以返回错误响应(例如HttpError)以返回自定义错误,但是对于成功的响应,您应该返回AuthenticateResponse类型,因为这是所有客户端/服务使用者所期望的(以及其他AuthResponse筛选器和装饰器) )。如果要在AuthenticateResponse中返回其他信息,则应在其Meta词典属性中返回它们。