Вы можете использовать SOAP для передачи имени пользователя / пароля с запросом. SSL должен использоваться для шифрования данных, передаваемых по проводам. Вот код, который мы используем:
Это класс, который будет содержать учетные данные, отправленные с запросом:
Imports System.Web.Services.Protocols
Public Class ServiceCredentials
Inherits SoapHeader
Private _userName As String
Public Property UserName() As String
Get
Return _userName
End Get
Set(ByVal value As String)
_userName = value
End Set
End Property
Private _password As String
Public Property Password() As String
Get
Return _password
End Get
Set(ByVal value As String)
_password = value
End Set
End Property
Public Sub New()
End Sub
Public Sub NewUserInfo(ByVal ServiceUser As String, ByVal ServicePassword As String)
Me.UserName = ServiceUser
Me.Password = ServicePassword
End Sub
Добавьте атрибут в определение вашей веб-службы:
<WebMethod()> _
<SoapHeader("CredentialsHeader")> _
Function MyWebMethod(ByVal paremetersPassed as String)
'check permissions here
If PermissionsValid(CredentialsHeader) then
'ok!
.......
else
'throw a permission error
end if
End Function
А затем просто создайте функцию (в моем примере PermissionsValid) для проверки разрешений:
Function PermissionsValid(byval Credentials as ServiceCredentials) as boolean
'check Credentials.Username and Credentials.Password here and return a boolean
End Function
Это может показаться кучей работы, но таким образом, когда они отправляют запрос, вы можете сравнить его с базой данных или чем угодно еще. Вы также можете легко отключить имя пользователя на вашем конце.
Более простым способом было бы ограничить IP-адреса, которым разрешено попадать на страницу обслуживания. Но затем возникают проблемы с изменением IP-адресов и т. Д.
Кстати, большая часть этого была напечатана, как и я, поэтому вам, возможно, придется проверить код, чтобы убедиться, что он компилируется. :)