Carlinha Soneta está fazendo com que eu seja produtivo na
postagem de dicas para vocês. Dessa vez ela solicitou que, para a autenticação do usuário do
WS, além de informar Usuário e Senha, fosse informado o
"Hash" de uma mensagem. Essa solicitação baseou-se na necessidade de um cliente com .
net e em função do seguinte artigo:
"WebService utilizando soapHeader e token". Pensei um pouco e bolei o seguinte esquema para autenticação:
1 ) Criar um método para obtenção de Mensagens: O usuário do
WS iria chamar esse método e obter uma mensagem aleatória. Retornaria o "
Hash" dessa mensagem calculado via
MD5;
2 ) Criar um método para validação do Usuário
considerando, além do Usuário e Senha, o "
Hash" da mensagem.
Eu poderia ter criado uma tabela de mensagens a serem geradas, mas optei em trabalhar com a tabela
SX5 (Tabelas Genéricas) com a opção de retornar as mensagens em Português, Inglês ou Espanhol de forma aleatória e/ou embaralhada. Na realidade, o esperado do
WS de mensagem é uma mensagem qualquer, que deverá ser codificada e retornada para autenticação do usuário do
WS.
Sendo assim, criei os seguintes
WS:
/*/
WSSERVICE: u_
wsGetMessagesAutor:
Marinaldo de Jesus & Carla (amor) Soneta
Data: 29/07/2010
Descrição:
Serviço Mensagens Para
Token de
Autenticação de
UsuárioUso:
WS/*/
Esse WS será usado para a obtenção de Mensagens que serão utilizadas, em conjunto com Usuário e Senha, para a autenticação do usuário. Esse WS possui os seguintes métodos:
GetMessage: usado para a obtenção de
Mensagem Aleatória ; e
ClearStackMD5Hash: usado para limpar a Pilha de Mensagens.
GetMessage receberá, como parâmetros: Language e Embaralha. Language será utilizado para identficar em que idioma a mensagem será enviada: PT (Português), ENG (Inglês), SPA (Spanish) ou Brancos (para não considerar a Descrição do SX5, retornando uma mensagem composta por constantes, e informações variáveis do sistema como Date() e Time()). Já Embaralha, do tipo lógico (boolean) quando "setado", fará com que as mensagens sejam "embaralhadas" antes de serem enviadas. Ele retornará conforme parâmetros de entrada, a mensagem ao "client" solicitante. O "Hash" dessa mensagem deverá ser retornado quando da validação do usuário do WS.
ClearStackMD5Hash receberá, como parâmetros de entrada: ClearAllMD5Hash, MD5HashClear e de saída Message. Se ClearAllMD5Hash for "setado" como "true" a pilha de mensagens armazenadas em GetMessage será esvaziada, caso contrário, apenas o "hash" passado em MD5HashClear será eliminado da pilha de mensagens. Message retornará uma mensagem informativa de acordo com o conteúdo de ClearAllMD5Hash.
/*/
WebService: u_
wsUserValidAutor:
Marinaldo de Jesus & Carla
Soneta
Data: 29/07/2010
Descrição: Web Service para Validação de Usuário do WS usando MD5
Uso: WebServices
/*/
Esse WS será utilizado para validar o Usuário e Senha e o "Hash" conforme mensagem obtida através do método GetMessage. Ele possui o seguinte método ValidUserWs.
O método ValidUserWs, receberá, como parâmetros de entrada: UserWs, UserWsPasswd, Token e HASHMD5UserAndPsw
UserWs : Nome e/ou Código do Usuário do WS
UserWsPasswd: Senha do Usuário do WS
Token: "MD5 Hash" da mensagem obtida através do WS u_wsGetMessages
HASHMD5UserAndPsw: Se, ao invés de Considerar o Usuário e Senha informados nos parâmetros, deverá considerar o "MD5 Hash" do valor digitado.
Esse método irá retornar lValidUserWs, com o valor "true", se o usuário for validado, ou "false" caso contrário. Um "Soap Fault" poderá ser gerado de acordo com o parâmetro invalidado.
Além do métodos acima, o programa que contém o WS de Validação de Usuário e obtenção das Mensagens, possui também a função Random( nRange , nMin , nMax ). Random retornará um numero aleatório para um determinado intervalo.
Considerando que o programa possui 2 WS, para cada um deverá ser gerado um "Client".
Além dos WS acima citados, foi criado o WS u_wsTstUserValid. Esse WS será utilizado para demonstrar o uso dos demais.
/*/
WebService: u_wsTstUserValid
Autor: Marinaldo de Jesus & Carla Soneta
Data: 29/07/2010
Descrição: Web Service para Teste Validação de Usuário do WS usando MD5
Uso: WebServices
/*/
O WS u_wsTstUserValid possui os seguintes métodos:
SampleVld01: "Exemplo 01 - Usando Language igual a PT, Usuário e Senhas originais e Não Embaralha"
SampleVld02: "Exemplo 02 - Usando Language igual a ENG, Usuário e Senhas originais e Não Embaralha"
SampleVld03: "Exemplo 03 - Usando Language igual a SPA, Usuário e Senhas originais e Não Embaralha"
SampleVld04: "Exemplo 04 - Usando Language em Branco, Usuário e Senhas originais e Não Embaralha"
SampleVld05: "Exemplo 05 - Usando Language igual a PT, Usuário e Senhas originais e Embaralha"
SampleVld06: "Exemplo 06 - Usando Language igual a ENG, Usuário e Senhas originais e Embaralha"
SampleVld07: "Exemplo 07 - Usando Language igual a SPA, Usuário e Senhas originais e Embaralha"
SampleVld08: "Exemplo 08 - Usando Language em Branco, Usuário e Senhas originais e Embaralha"
SampleVld09: "Exemplo 09 - Usando Language igual a PT, Hash de Usuário e Senha e Não Embaralha"
SampleVld10: "Exemplo 10 - Usando Language igual a ENG, Hash de Usuário e Senha e Não Embaralha"
SampleVld11: "Exemplo 11 - Usando Language igual a SPA,, Hash de Usuário e Senha e Não Embaralha"
SampleVld12: "Exemplo 12 - Usando Language em Branco, Hash de Usuário e Senha e Não Embaralha"
SampleVld13: "Exemplo 13 - Usando Language igual a PT, Hash de Usuário e Senha e Embaralha"
SampleVld14: "Exemplo 14 - Usando Language igual a ENG, Hash de Usuário e Senha e Embaralha"
SampleVld15: "Exemplo 15 - Usando Language igual a SPA,, Hash de Usuário e Senha e Embaralha"
SampleVld16: "Exemplo 16 - Usando Language em Branco, Hash de Usuário e Senha e Embaralha"
E todos eles receberão, como parâmetro de entrada:
Usr e
Pwd,
retornando:
lUserOk. Cada um explorará as
características de validação de maneira diferente (no exemplo, 16). Considerando que no
WS de validação defini as seguintes constantes como Usuário e Senha:
#DEFINE
USERWS_
NAME, com o seguinte valor: '
naldodj'
e ;
#DEFINE
USERWS_PASSWORD, com o seguinte valor:
'@#Essa[!$]Eh[!$]A[!$]Minha[!$]Senha[!$]Para[!$]Acesso[!$]Ao[!$]Ws#@'
São essa informações que deverão ser passadas para validação.
Altere-as conforme o seu gosto e necessidade.
Dessa vez não vou reproduzir o código aqui no "
post".
Disponibilizarei apenas o link para os arquivos ( num total de 5 ).
Esses arquivos são:
1 ) u_
WsUserValid.
prw: contém os
WS para obtenção das mensagens e para Validação;
2 )
client_u_
wsGetMessages.
prw:
Client do
WS u_
wsGetMessages;
3 )
client_u_
wsUserValid.
prw:
Client do
WS u_
wsUserValid;
4 ) u_
WsTstUserVld.
prx: contém o
WS com exemplos de uso; e
5 )
client_U_
WSTSTUSERVALID.
prw:
Client do
WS u_
wsTstUserValid.
Para usá-los:
1 ) Compile o programa u_
WsUserValid.
prw;
2 ) Compile o programa u_
WsTstUserVld.
prx; e
3 ) Gere os clientes para cada serviço.
Bom divertimento. E, como sempre,
clique aqui para "baixar" os fontes.
[]s
иα
ldσ
dj...
Comentários
Postar um comentário