我是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服务时调用身份验证时迷失了方向。请帮忙。
答案 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
。