执行凭证身份验证后,Servicestack未经授权的异常

时间:2014-10-22 16:51:58

标签: servicestack-bsd

我试图让Servicestack Credentials身份验证工作,但是当我尝试使用[Authenticate]修饰的受保护服务时,即使身份验证成功,我也会收到未经授权的异常。这里错过了什么?

AppHost看起来像这样:

    AuthFeature authFeature = new AuthFeature(() => new AuthUserSession(),
            new IAuthProvider[]{                    
                new BpeCredentialsAuthProvider(), //HTML Form post of UserName/Password credentials                                        
            }) { HtmlRedirect = null };
        authFeature.ServiceRoutes[typeof(AuthService)] = new[] { "/auth" };  
        authFeature.IncludeAssignRoleServices = false;
        Plugins.Add(authFeature);
container.Register<ICacheClient>(new MemoryCacheClient());

我认为我正确地覆盖TryAuthenticate并且从Swagger一切正常。问题在于客户端调用 - 在针对myurl / auth / success的身份验证之后 - 下一次调用其他服务会因未经授权的异常而失败。有什么好主意吗?

经过更多研究:看起来需要将ss-id / ss-pid cookie传递给受限资源进行身份验证。我怎样才能做到这一点?

2 个答案:

答案 0 :(得分:0)

通过Ajax进行身份验证时,Cookie会自动发送给后续请求。

C#/.NET Service Clients同样,在对请求进行身份验证时指定RememberMe=true时,Cookie将保留在Authenticated Service Client上,例如:

var client = new JsonServiceClient(baseUrl);

var authResponse = client.Post(new Authenticate {
    provider = CredentialsAuthProvider.Name,
    UserName = "user",
    Password = "p@55word",
    RememberMe = true,
});

然后,您可以重复使用同一个实例进行经过身份验证的请求:

var response = client.Post(new Secure { ... });

您还可以通过协助CookieContainer例如

将Cookie转移到新客户端
newClient.CookieContainer = client.CookieContainer;

答案 1 :(得分:0)

我发现不仅需要将sessionId cookie传递给后续请求,还要传递整个容器-ss-id,ss-pid,ss-opt,X-UAId-。我无法从ICacheClient访问cookie容器,我必须在身份验证到位时手动设置cookie并请求该容器的所有cookie并将它们添加到新的服务调用中。