我的手动实现基本HTTP身份验证有什么问题吗?

时间:2011-05-16 22:59:37

标签: wcf authentication basic-authentication http-authentication http-basic-authentication

我正在使用WCF开发一个RESTful Web服务,该服务充当一组存储过程的代理,出于安全原因,这些存储过程无法由面向Internet的应用程序直接访问。

实现服务DataContract的类有一个帮助器属性,用于检索当前登录用户的名称,如果当前没有用户登录,则生成HTTP 401 Unauthorized响应。

[ServiceContract]
public class MyService
{    
    // The helper property
    string UserName
    {
        get
        {
            WebOperationContext context = WebOperationContext.Current;
            if (context != null)
            {
                string authHeader = context.IncomingRequest.Headers[HttpRequestHeader.Authorization];
                if (authHeader != null && authHeader.StartsWith("Basic "))
                {
                    string string64 = authHeader.Substring(6);
                    byte[] array64 = Convert.FromBase64String(string64);
                    string decoded = ASCIIEncoding.ASCII.GetString(array64);
                    string[] authParts = decoded.Split(':');

                    if (ValidateLogin(authParts[0] /*userName*/,
                                      authParts[1] /*password*/))
                        return authParts[0];
                }
            }

            OutgoingWebResponseContext outgoing = context.OutgoingResponse;
            outgoing.StatusCode = HttpStatusCode.Unauthorized;
            outgoing.Headers[HttpResponseHeader.WwwAuthenticate] = "Basic";
            return null;
        }
    }

    [OperationContract]
    public int LengthOfUserName()
    {
        return UserName.Length;
    }
}

但是,当我尝试使用有效的用户名和密码登录时,仍然会收到未经授权的错误。我的代码出了什么问题?

0 个答案:

没有答案