部署到IIS 7时ServiceStack身份验证的问题

时间:2014-01-25 13:40:04

标签: authentication iis-7 servicestack

在部署到IIS 7生产Web服务器时,我遇到了使身份验证工作的问题。我正在使用内存身份验证,当我从Visual Studio本地运行时,一切正常。但是,当我尝试使用ServiceStack客户端从WPF应用程序连接到生产Web服务器时,我遇到了不同的错误,包括:

  • “未找到”
  • “未授权”
  • “{”长度不能小于零。参数名称:length“}”

我在IIS中尝试了多种身份验证配置,包括启用/禁用表单身份验证,Windows身份验证和基本身份验证,但都无济于事。

  • 我有时可以使用CodeInChaos.com REST客户端进行连接。
  • 密码和用户名绝对正确。

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;
    }
}

1 个答案:

答案 0 :(得分:1)

IIS身份验证与ServiceStack身份验证无关,如果您不需要,请将其关闭。

如果启用了IIS身份验证,它将在ServiceStack应用程序之上有效运行。因此,它将在所有对ServiceStack服务的请求之前运行,并且您最终必须首先满足此安全标准。如果通过了您的请求,则会转到ServiceStack应用程序。

大多数在ServiceStack中实现身份验证的人都不需要IIS来实现身份验证。