Array
(
)

Segurança em Web Services

Patrickreinan
   - 30 jan 2007

Pessoal, bom dia

Como posso implementar segurança em Web Services de maneira rápida?
Eu preciso que o meu WebService não fique exposto a qualquer usuário e que somente minha aplicação possa acessá-lo a partir de um usuário e senha. Alguém tem idéia de como eu posso fazer isso?

Pedro Carvalho
   - 12 abr 2007

Esse problema é fácil de resolver...

Primeiro vc deve desabilitar a opção de anonimos do IIS clicando com o botão direito em cima da sua aplicação escolha propriedade/segurança do diretório/editar... desmarque a opção acesso anônimo, desmaque a autenticação integrada do windows e marque a opção Autenticação básica...

Obs: quando vc fou depurar seu webservice não esqueça de marcar a opção autenticação integrada do windows...

vc pode colocar o usário e senha na autentição básica do windows...

Ghostmutante
   - 18 abr 2007

Bom, vamos pensar que este WebService vai estar hospedador em WebHosting no qual vc nao pode mecher na config do server, temos que nos preparar para isso, mas eh facil, tente fazer algo mais ou menos assim:

#Código

<WebMethod(Description:="Descreva aqui seu WebMethod")> _
    Public Function Meu_WebMethod( _
                       ByVal var1 As String, _
                       ByVal var2 As String, _
                       ByVal var3 As Integer, _
                       ByVal var4 As String) As Integer


Acima fizemos nossas declaracoes, agora vamos a seguranca:

#Código
Dim tem_erro as integer = 1

´aqui um exemplo se o campo eh obrigatorio
if var1 = "" then
     tem_erro = -1
end if

´aqui um exemplo se a requisicao veio da sua pagina
´isso seria o mais importante para vc saber se o cara acessou de sua
´aplicacao ou naum

´contamos que minha url seja: http://www.meu_site.com.br
If Not (InStr((Page.Request.ServerVariables("SERVER_NAME") & Page.Request.ServerVariables("PATH_INFO")).ToLower, "meu_site") > 0) Then
     tem_erro = -1
End If


Bom, agora vamos a nossa funcao:

#Código
If tem_erro > 0 then
Dim strSQL as String

strSQL = " INSERT INTO Minha_tabela (" & vbCrLf
        strSQL &= " Campo1, " & vbCrLf
        strSQL &= " Campo2, " & vbCrLf
        strSQL &= " Campo3, " & vbCrLf
        strSQL &= " Campo4, " & vbCrLf
strSQL &= ") VALUES (" & vbCrLf
        strSQL &= var1, " & vbCrLf
        strSQL &= var2, " & vbCrLf
        strSQL &= var3, " & vbCrLf
        strSQL &= var4 " & vbCrLf
strSQL &= ");"

´ ae executa toda a para, commando e tra la la...
Return 1

Else
     Return -1
End if
 End Function


Ae é o seguinte, guando tu chamar isso, tens o Return em Integer, se ele retornar -1 é pq deu erro, se retorna 1 deu certo...

Bom, isso foi um exemplo basico, temos varios outras formas para se fazer isso... Fiz a forma mais simples e funcional apenas para demonstrar como funciona.

Qualquer coisa chama que demonstra outras funções mais avançadas.

Abraços.

Pedro Carvalho
   - 20 abr 2007

Bom vamos lá...

Vc deve importar o seguinte namespace: Imports System.Net.

Depois vc cria a instância do seu webService, abaixo do Page_Load da sua página coloque esse comando:

nome_do_objeto_instanciado_do_webService.Credentials = New NetworkCredential(ConfigurationManager.AppSettings(´wsLogon´), ConfigurationManager.AppSettings(´wsPass´), ConfigurationManager.AppSettings(´wsDomain´))

No webConfig vc vai colocar essa minha de comnado:

<appSettings>
<add key=´wsLogon´ value=´nome_do_usuario_criado_na_maquina_com_permisao_de_adm´/>
<add key=´wsPass´ value=´senha_do_usuario´/>
<add key=´wsDomain´ value=´servidor_do_banco_de_dados´/>
</appSettings>

É claro que quando vc hospedar suas página vc deve informar ao administrador do provedor que ele deve fazer as configurações que falei na primeira postagem...

Um abraço...

Carlosmaxx
   - 20 abr 2007

Bom dia a todos,

Aqui onde eu trabalho nós fizemos da seguinte forma:

No IIS, na pasta virtual do web service colocamos uma configuração para que apenas o IP do próprio servidor possa acessá-lo.

Com isso vc impede que outras máquinas vejam seu web service. É claro que com essa configuração, as aplicações que consomem esse web service devem estar no mesmo servidor que ele.

É simples e funciona bem!

Abraço.