如何通过带有servicestack的soap web服务调用来执行如何调用用户身份验证来确定id服务?

时间:2018-04-06 14:58:58

标签: authentication soap servicestack

我是servicestack的新手。我需要使用userid和password实现servicestack来验证soap请求。

我创建了一个自定义的CredentialsAuthProvider,它覆盖了这个方法:

public override bool TryAuthenticate(IServiceBase authService,
string userName, string password)

并添加了

Plugins.Add(new AuthFeature(() => new AuthUserSession(),
               new IAuthProvider[] {
                    new SFCredentialsAuthProvider(),
               } 
to config in AppHost.

我的问题是我应该如何通过soap web服务调用来验证用户?

示例显示如下:

var client = new JsonServiceClient(BaseUrl);

var authResponse = client.Post(new Authenticate {
    provider = CredentialsAuthProvider.Name, //= credentials
    UserName = "test@gmail.com",
    Password = "p@55w0rd",
    RememberMe = true,
});

但是这个BaseUrl应该是什么,因为我只会在请求被认证的情况下执行服务?

我在如何在servicestack上执行soap服务时调用身份验证时迷失了方向。请帮忙。

2 个答案:

答案 0 :(得分:1)

自从我用BasicAuthProvider解决此问题以来已有很长时间了。下面的示例代码:

public override bool TryAuthenticate(IServiceBase authService,
        string userName, string password)
    {
        var httpReq = authService.Request;
        var basicAuth = httpReq.GetBasicAuthUserAndPassword();
        if (basicAuth == null)
            throw HttpError.Unauthorized(ErrorMessages.InvalidBasicAuthCredentials.Localize(authService.Request));

        var userid = basicAuth.Value.Key;
        var pwd = basicAuth.Value.Value;

//使用用户名和密码验证

}

答案 1 :(得分:0)

BaseUrl应该是托管ServiceStack服务的基本网址,例如对于本地IIS Express开发服务器,它通常采用http://localhost:{PortNumber}格式,当您点击F5运行您的应用程序时,会加载该格式。

由于您正在使用调用JSON HTTP API的JsonServiceClient,因此不确定您的问题与SOAP有什么关系。对于SOAP,您通常会在ServiceStack /wsdl端点添加 WCF服务参考,以从WSDL定义生成客户端代理,您可以使用该代理访问您的服务

但是,当您不需要使用SOAP you should avoid it时,只需使用示例中显示的JsonServiceClient