使用ServiceStack返回自定义身份验证响应

时间:2013-10-23 20:29:06

标签: asp.net-mvc authentication servicestack

Hello服务堆栈用户 -

TL;即将出现的问题的DR版本是这样的:如何在使用Servicestack进行身份验证时返回自定义身份验证响应?

我已经检查过一些关于这个主题的Stack问题/答案,但我还没有能够找到最好的方法来做到这一点:

How can I extend ServiceStack Authentication Return a custom auth response object from ServiceStack authentication

我想将此对象从ServiceStack返回到远程JsonServiceClient:

public class MyGreatCustomAuthResponse : AuthResponse
{
    public UserModel UserModel { get; set; }
}

我的客户端目前正在使用默认的身份验证响应。我是这样做的:

var AuthResponse = client.Post(new Auth
{
    provider = "credentials",
    UserName = user.user_id, 
    Password = user.password,
    RememberMe = true
});

我认为接受自定义响应的方式可能如下所示:

var AuthResponse = client.Post<MyGreatCustomResponse>(new CustomAuthRequest
{
    provider = "credentials",
   UserName = user.user_id, 
   Password = user.password,
    RememberMe = true
});
//Use the UserModel object in the response for some other function on the client
var UserModel = AuthResponse.UserModel ; 

这是容易实现的吗?如果是这样,怎么可能开始编码呢?

1 个答案:

答案 0 :(得分:0)

在v3中,除了复制和自定义内置AuthService之外,您还可以使用GlobalResponse Filter Attribute附加自定义HTTP标头来添加其他元数据。

在下一个v4版本中,我们向Authentication and Registration Response DTOs添加了Dictionary<string, string> Meta,以便您可以使用响应过滤器直接在Response DTO中添加元数据。

示例代码

 this.GlobalResponseFilters.Add((req, res, responseDto) =>
        {
            if (res.Dto.GetType() == typeof(AuthenticateResponse))
            {
                CustomUserSession cs = (CustomUserSession)req.GetSession();
                Dictionary<string, string> otherData = new Dictionary<string, string>();
                otherData.Add("CustomData", cs.CustomData.ToString());
                ((AuthenticateResponse)res.Dto).Meta = otherData;
            }
        });