我正在使用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;
}
}
但是,当我尝试使用有效的用户名和密码登录时,仍然会收到未经授权的错误。我的代码出了什么问题?