WebService非标准授权类型

Posted

技术标签:

【中文标题】WebService非标准授权类型【英文标题】:WebService non-standard Authorization Type 【发布时间】:2011-07-26 03:07:43 【问题描述】:

我有一个服务提供商,他们的 Web 服务需要非标准的授权类型。

它们需要“基本 API 访问权限”,而不是 Basic、Digest、NTLM 等。

我已经尝试了下面的代码并使用 Fiddler 来检查 Web 服务请求。

好像不能使用任何自定义字符串

    Binding avail = new Binding();
    avail.Url = "https://amer.webservicesxx.com/Availability";

    NetworkCredential netCredential = new NetworkCredential("abc", "def");
    Uri uri = new Uri(avail.Url);

    CredentialCache cred = new CredentialCache();
    cred.Add(uri, "Basic API Access", netCredential);
    avail.Credentials = cred;

    SearchRsp response = avail.service(request);

POST https://amer.webservicesxx.com/AvailabilityHTTP/1.1

用户代理:Mozilla/4.0(兼容;MSIE 6.0;MS Web 服务客户端 协议 4.0.30319.1) VsDebuggerCausalityData: uIDPo+CJPwpspBxKp939c... Content-Type: text/xml;字符集=utf-8 SOAPAction:“” 主机:america.webservicesxx.com 内容长度: 658 期望:100-继续

?xml version="1.0" encoding="utf-8"?> ?soap:信封 xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/20 01/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> ... ?/soap:信封>

它缺少...

授权:基本 API 访问/dUFQSS04NDA0NTk2MDk6WiFyYzBuZDg0...

...标题中的行。

如果我只使用"Basic",它会正确添加授权行,但会被服务提供商拒绝。

这是向 Soap 事务添加 Authorization: 标头的正确语法吗?

【问题讨论】:

【参考方案1】:

我需要替换网络请求中的数据。

protected override System.Net.WebRequest GetWebRequest(Uri uri)

     WebRequest request = base.GetWebRequest(uri);
     request.Headers.Add("Authorization: Basic API Access dUFQSS04NDA0NT...");

     return request; 
 

在 Web 服务引用类中。

【讨论】:

以上是关于WebService非标准授权类型的主要内容,如果未能解决你的问题,请参考以下文章

如何调用别人提供的webservice接口

通过服务器端设置解决前端AJAX请求跨域访问WebServie(C#开发,IIS发布)

WebService 之 实例学习一

其他设计

调用webService的几种方式

WCF探索之旅——WCF与WebService的异同