代码之家  ›  专栏  ›  技术社区  ›  photo_tom

使用asmx web服务进行基本身份验证

  •  0
  • photo_tom  · 技术社区  · 6 年前

    我正在尝试为ASMXweb服务实现基本授权。我在VS2015中创建了客户机作为服务引用。我在中使用代码 Asmx web service basic authentication 例如。

    我正在ClientCredentials中输入登录信息,如下所示

       Dim svc As New WebServiceSoapClient()
       svc.ClientCredentials.UserName.UserName = "userId"
       svc.ClientCredentials.UserName.Password = "i2awTieS0mdO"
    

    我的问题是,在web服务中的授权HttpModule中,这些凭据没有传递给模块。有没有其他方法可以做到这一点?

    1 回复  |  直到 6 年前
        1
  •  0
  •   photo_tom    6 年前

    我找到了答案 How to add HTTP Header to SOAP Client .我必须在那页上结合几个答案才能使它起作用。

        Dim svc As New WebServiceSoapClient()
        Dim responseService As SoapResponseObject
        Using (new OperationContextScope(svc.InnerChannel))
    
            Dim auth = "Basic " + Convert.ToBase64String(Encoding.Default.GetBytes("userId:i2awTieS0mdO"))
    
            Dim requestMessage = New HttpRequestMessageProperty()
            requestMessage.Headers("Authorization") = auth
            OperationContext.Current.OutgoingMessageProperties(HttpRequestMessageProperty.Name) = requestMessage
    
            dim aMessageHeader = MessageHeader.CreateHeader("Authorization", "http://tempuri.org", auth)
            OperationContext.Current.OutgoingMessageHeaders.Add(aMessageHeader)
    
            responseService = svc.ListDistricts(requestService)
    
        End Using
    

    需要注意的一点是,soap客户端调用必须位于Using语句中。在上面的代码中,这是最后一行的下一行。