ServiceStack JsonServiceClient发送basic而不是Basic for Authorization标头

时间:2013-02-28 06:09:22

标签: authorization servicestack

我正在使用JsonServiceClient客户端与外部供应商在IIS 7上托管的RESTful服务进行通信。

以下是我用来调用Get方法的示例代码。

ServiceStack.ServiceClient.Web.JsonServiceClient client = new ServiceStack.ServiceClient.Web.JsonServiceClient("UrlToVendor"));

client.SetCredentials("userName", "password");

client.AlwaysSendBasicAuthHeader = true; 
DTOReturn result = client.Get<DTOReturn>(string.Empty);

我总是得到授权失败。我们放了一个嗅探器,Authorization标头发送为:

  

基本用户名:密码

而不是

  

基本用户名:密码

我们能够使用标准的.Net调用来使其正常工作

System.Net.HttpWebRequest req = (System.Net.HttpWebRequest)System.Net.HttpWebRequest.Create(
                "UrlToVendor");

string authInfo = "userName:password";
authInfo = Convert.ToBase64String(Encoding.Default.GetBytes(authInfo));

req.Accept = "application/json"; //text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
req.PreAuthenticate = true;
req.Method = "GET";
req.Headers["Authorization"] = string.Format("Basic {0}", authInfo);

System.Net.HttpWebResponse res = (System.Net.HttpWebResponse)req.GetResponse();

如果我们将“Basic”更改为“basic”,那么这些标准调用与JasonServiceClient失败相同。 有什么建议吗?

1 个答案:

答案 0 :(得分:2)

看起来有人有同样的问题。最近的提交将auth-scheme从“basic”改为“Basic”。 https://github.com/ServiceStack/ServiceStack/commit/d4f21c5355ab87d7315e142372eef9a40e096b5f 你应该能够更新你的dll。

根据RFC 2617 sec 1.2, auth-scheme不区分大小写。 见http://tools.ietf.org/html/rfc1945#page-47。我很好奇供应商服务为什么不接受它。