在部署到IIS 7生产Web服务器时,我遇到了使身份验证工作的问题。我正在使用内存身份验证,当我从Visual Studio本地运行时,一切正常。但是,当我尝试使用ServiceStack客户端从WPF应用程序连接到生产Web服务器时,我遇到了不同的错误,包括:
我在IIS中尝试了多种身份验证配置,包括启用/禁用表单身份验证,Windows身份验证和基本身份验证,但都无济于事。
global.asax
:
public override void Configure(Funq.Container container)
{
RegisterPlugins();
RegisterValidators(container);
RegisterCaches(container);
RegisterSessionFactories(container);
RegisterRepositories(container);
RegisterUsers(container);
}
private void RegisterPlugins()
{
Plugins.Add(new AuthFeature(() => new AuthUserSession(),new IAuthProvider[] { new BasicAuthProvider()}));
}
private void RegisterUsers(Funq.Container container)
{
var userRepository = new InMemoryAuthRepository();
container.Register<IUserAuthRepository>(userRepository);
string hash;
string salt;
new SaltedHash().GetHashAndSaltString("xxxxxxxx", out hash, out salt);
userRepository.CreateUserAuth(new UserAuth
{
Id = 1,
DisplayName = "xxx xxxxxx",
Email = "xxxx@xxxxx.com",
UserName = ""xxxxxxxx,
FirstName = "xxxx",
LastName = "xxxx",
PasswordHash = hash,
Salt = salt,
Roles = new List<string> { RoleNames.Admin },
}, "xxxxxxxx");
}
我的客户:
public UserEntity GetUserFromDomainUsername(string domainUsername)
{
try
{
using (var client = new StormJsonServiceClient(WebServiceUrl){UserName = "xxxxxxx", Password = "xxxxxxxx"})
{
var response = client.Send(new UserFromDomainUsernameQuery { DomainUsername = domainUsername });
return response.User;
}
}
catch (Exception exception)
{
var ex = exception as WebServiceException;
if (ex != null)
{
throw new VqsWebServiceException(GetWebServiceErrorMessage(ex));
}
throw;
}
}
答案 0 :(得分:1)
IIS身份验证与ServiceStack身份验证无关,如果您不需要,请将其关闭。
如果启用了IIS身份验证,它将在ServiceStack应用程序之上有效运行。因此,它将在所有对ServiceStack服务的请求之前运行,并且您最终必须首先满足此安全标准。如果通过了您的请求,则会转到ServiceStack应用程序。
大多数在ServiceStack中实现身份验证的人都不需要IIS来实现身份验证。