Pular para o conteúdo principal

Postagem em destaque

🚀 Oferecendo Serviços Remotos de Desenvolvedor AdvPL e Mais 🖥️

🚀 Oferecendo Serviços Remotos de Desenvolvedor AdvPL e Mais 🖥️ Olá pessoal, Espero que este post encontre todos vocês bem! É com grande entusiasmo que compartilho que estou expandindo meus serviços como Desenvolvedor AdvPL para novos desafios e colaborações. Com mais de duas décadas de experiência sólida, minha jornada profissional tem sido enriquecedora, com a oportunidade de participar de projetos empolgantes ao longo dos anos. Agora, estou ansioso para trazer minha experiência e habilidades para novas equipes e projetos, trabalhando de forma remota. Minha expertise abrange não apenas AdvPL, mas também outras tecnologias-chave, incluindo JS, SQL, Infraestrutura e Otimização de Processos. Acredito que essa combinação de conhecimentos me permite oferecer soluções abrangentes e eficazes para uma variedade de necessidades de desenvolvimento. Acredito que a tecnologia tem o poder de transformar negócios e impulsionar o sucesso, e estou comprometido em ajudar meus clientes a alcançar seu

Protheus :: Autenticação WebService versão 2.0

Dando continuidade ao tema sobre validação de acesso aos métodos do WebService do Protheus, iniciado no "post": Protheus :: Autenticação nos WebServices Protheus. Usando MD5 (Message Digest Algorithm 5) , vou publicar, nesse novo "post", a versão 2.0 do programa ali originalmente publicado. Essas alterações foram necessárias porque minha querida amiga Carla Soneta ( que solicitou o exemplo ) alertou-me sobre possíveis falhas no método anterior, uma vez que qualquer pessoa que tivesse acesso aos métodos de validação e que de alguma forma conseguisse capturar o usuário e senha poderia fazer uso indevido dos métodos ali publicados. Sendo assim, e sem querer encerrar o assunto ( pois existem n maneiras de autenticar um WebService ), vou descrever, em breves palavras, as alterações e melhorias implementadas nessa nova versão.

Essa nova versão, em relação à anterior, traz as seguintes alterações:

1 ) Na anterior o usuário e senha estavam fixos no programa. Nessa versão existe um arquivo de configuração onde vários usuários e várias senhas deverão ser configurados para acesso ao WS. Para que isso fosse possível implementamos o Conceito de "CheckSum". Nesse modelo qualquer senha definida no arquivo de configuração de usuário e senhas poderá ser usada para qualquer usuário e vice-versa. Bastando informar, junto com o usuário e a senha, o "CheckSum" dessa combinação. Mas como isso funciona? Funciona da seguinte forma: O WS de validação de usuário irá procurar no arquivo u_wsuservalid.ini as configurações de usuários e senhas, as senhas não estão diretamente associadas a um determinado usuário, vale para qualquer um. Para que essa verificação seja aceita pelo WS de autenticação, será necessário informar uma combinação numérica que relacione o usuário à senha. por exemplo:

No arquivo de configuração ( u_wsuservalid.ini ) poderemos ter as seguintes informações:

[UserName]
naldodj
Carla
NaldoDj
Soneta
NALDODJ
Carla Soneta
NaldoDJ
CarlaSoneta
NALDOdj
SonetaCarla
NAlDoDj
CarlaS
ODLANJD
SCarla
OdlanJD
SonetaC
odlanjd
CSoneta
OdlanJd
Naldo&Soneta

[UserPassWord]
b3d28e7f822dac10b74101712651597ba152c2fc
Ly9QYXJhIG8gRGVjb2RlNjQgdXNlOiBodHRwOi8vd3d3Lm9waW5pb25hdGVkZ2Vlay5jb20vZG90bmV0L3Rvb2xzL2Jhc2U2NGRlY29kZS8qLw==
9dd867e76e02c3fa10ae50dcc11081c5d2adec57
6148ea40e060b81e0baa6927adffa3b847e8bf38
9dd867e76e02c3fa10ae50dcc11081c5d2adec57
d5582b0680b92e1e5cf378d62d559e196e4a28a2
e17f619c2c04dbc833c700283f094c29
941006ed741ab68bebccfa32885cf013
OTQxMDA2ZWQ3NDFhYjY4YmViY2NmYTMyODg1Y2YwMTM=
IjlkZDg2N2U3NmUwMmMzZmExMGFlNTBkY2MxMTA4MWM1ZDJhZGVjNTci
Ikx5OVFZWEpoSUc4Z1JHVmpiMlJsTmpRZ2RYTmxPaUJvZEhSd09pOHZkM2QzTG05d2FXNXBiMjVoZEdWa1oyVmxheTVqYjIwdlpHOTBibVYwTDNSdmIyeHpMMkpoYzJVMk5HUmxZMjlrWlM4cUx3PT0i
SWt4NU9WRlpXRXBvU1VjNFoxSkhWbXBpTWxKc1RtcFJaMlJZVG14UGFVSnZaRWhTZDA5cE9IWmtNMlF6VEcwNWQyRlhOWEJpTWpWb1pFZFdhMW95Vm14aGVUVnFZakl3ZGxwSE9UQmliVll3VEROU2RtSXllSHBNTWtwb1l6SlZNazVIVW14Wk1qbHJXbE00Y1V4M1BUMGk=
726537f8c72cd9d7cfc5119ce4e5cffc
ba21af37a12b7dc83a5757db430a62ef
QWJvdXQgbWQ1IGNyeXB0b2dyYXBoaWMgaGFzaCBmdW5jdGlvbjo=
9bf60941217f0a2f373ef0019dbfe1ea
ebaafb90de2dfce92005eb20c906437a
ZWJhYWZiOTBkZTJkZmNlOTIwMDVlYjIwYzkwNjQzN2E=
RnJvbSBXaWtpcGVkaWEsIHRoZSBmcmVlIGVuY3ljbG9wZWRpYQ==
Um5KdmJTQlhhV3RwY0dWa2FXRXNJSFJvWlNCbWNtVmxJR1Z1WTNsamJHOXdaV1JwWVE9PQ==

[TimeOut]
1300

Onde:

[UserName] define todos os usuários possíveis para acesso ao WS
[UserPassWord] define todas as senhas possíveis para acesso ao WS
[TimeOut] define o tempo, em segundos, para a validade de uma mensagem obtida através do método GetMessages.

Ex.:

Vamos supor que para a validação do WS foi selecionado o usuário "Naldo&Soneta", observe que na ordem, esse usuário possui o valor 20. E, para a senha, a escolha foi: d5582b0680b92e1e5cf378d62d559e196e4a28a2, que, se observarmos a ordem, teria o valor 6, então, o "CheckSum" para autenticar esse usuário e senha seria 20 + 6, 26. Não existe limite para a quantidade de usuários e de senhas e essa quantidade não precisa, necessariamente, ser igual. Posso ter 10 usuários para 1000 senhas como posso ter 1000 usuários para duas senhas. o "CheckSum" é que irá definir se o usuário ou senha estão ou não corretos. Para que isso fosse possível e, diferente da versão anterior, o método "ValidUserWs" do WS "u_wsUserValid", na versão 2.0 receberá, também, como parâmetro, a propriedade: "CheckSum".

Para que esses usuários e senhas sejam autenticados é necessário que o arquivo de configuração esteja na pasta "\wstoken\" abaixo do "rootpath" do "protheus". O "Client", usuário dos WS também deverá possuir esse arquivo, pois para que os usuários e senhas sejam autenticadas deverão estar nas duas pontas ( no "server" do "protheus" e no Cliente usuário do WS) . É o cliente do WS quem escolhe qual usuário e senha utilizar.

Além do conceito de múltiplos usuários e senhas e "CheckSum", foi implementado, nessa nova versão, o conceito de "TimeOut". Lembrando que para a validação do usuário e senha do WS, além do usuário, senha e, agora, "CheckSum", é necessário informar, também, o "MD5 Hash" de uma mensagem obtida através do método "GetMessage" do WS "u_wsGetMessages". Na versão anterior essa mensagem ia "crua" para o cliente e ele, após obtê-la, calculava o "MD5 Hash" e a devolvia para o método de validação. Nessa nova versão, a mensagem vai criptografada via "Base64". O Cliente solicitante da Mensagem deverá decodificá-la antes de obter o "Hash" a ser enviado para autenticação. O "TimeOut" irá definir o tempo, em segundos, que uma mensagem ,obtida através do método "GetMessage", terá validade.

O método ClearStackMD5Hash também teve um tratamento especial. Na versão anterior, qualquer um, com acesso do WS u_getmessages poderia limpar a "pilha" de mensagens, tornando a autenticação inviável. Na versão 2.0 esse método foi vinculado a um novo WS, o "u_wsClearMessages". Esse novo WS é unica e exclusivamente utilizado para limpar a "pilha de mensagens" obtidas através do método "GetMessage". A diferença básica é que agora, para limpar a "pilha" de mensagens obtidas através de "GetMessage", será necessário autenticar-se também. Ao contrário da versão anterior, o método ClearStackMD5Hash passou a receber, como parâmetro de entrada: UserWs ( Usuário ), UserWsPasswd ( Senha ) , CheckSum ( numero que relaciona o usuário à senha ), Token ( "MD5 Hash" da mensagem obtida através de "GetMessage") e HASHMD5UserAndPsw ( que definirá se deverá ser informado, no usuário e senha, os valores originais ou o "MD5 Hash" de cada um).

O WS para teste desse modelo de autenticação de WS também foi alterado de forma a contemplar as melhorias implementadas na versão 2.0. Os nomes dos programas e dos métodos são sugestivos, então acredito que vocês, caso queiram testa-los e utilizá-los, não terão problema.

Vale lembrar que:

1 ) O arquivo de configuração "u_wsuservalid.ini", que será encontrado na pasta "\wstoken\" ( abaixo do "RootPath" do Protheus), será criado na primeira vez que qualquer método dessa nova versão for executado. Ele deverá ser alterado para atender às suas necessidades.
2 ) Considerando que o programa "u_wsuservalid.prw" contém 3 WS diferentes, deverá ser gerado um "Client" para cada um deles.
3 ) No arquivo disponibilizado logo abaixo estão os "WebServices" bem como os "Clients" de cada um. Os nomes são sugestivos e poderão ser alterados a seu "bel" prazer.

Chega de enrolação e vamos ao que interessa: Clique aqui para obter a nova versão do WS para autenticação.

Carlinha, é sempre um prazer poder te ajudar. Grande abraço desse seu "amigo Malukinho". Obs.: Esse WS já está funcional, se for o seu desejo , e de seu cliente também, é só seguir o modedo implementado no WS de teste para usá-lo.

[]s

Comentários

  1. Naldo...
    tua séria de WS é muito legal. Tô acompanhando já faz um tempo. Num dos códigos vc postou a preparação do Ambiente utilizando RPCSetType(3) ou Prepare Environment.

    Ha casos em que os colegas utilizam a função ChkFile(alias) abrindo tabela a tabela.

    Qual a diferença entre as três alternativas: RPC, Prepare e ChkFile? E em termos de performance?

    []´s
    Marcelo Vicente
    marchvic@totvs.com.br

    ResponderExcluir
  2. Naldo...
    tua séria de WS é muito legal. Tô acompanhando já faz um tempo. Num dos códigos vc postou a preparação do Ambiente utilizando RPCSetType(3) ou Prepare Environment.

    Ha casos em que os colegas utilizam a função ChkFile(alias) abrindo tabela a tabela.

    Qual a diferença entre as três alternativas: RPC, Prepare e ChkFile? E em termos de performance?

    []´s
    Marcelo Vicente
    marchvic@totvs.com.br

    ResponderExcluir
  3. Existe alguma função onde pega uma imagem e converte em binário ?
    O ENCODE64 pega um texto e não uma imagem!!!

    Vlw

    ResponderExcluir

Postar um comentário

Postagens mais visitadas deste blog

BlackTDN :: RLeg ~ Desvendando a Função ParamBox

Para quem precisar desenvolver uma interface de entrada de dados, coisa rápida, e não quer ter aquele trabalhão danado que todos já sabemos, o Protheus tem uma função que ajuda muito, é uma interface semelhante a função Pergunte, porém com muito mais opção de objeto de entrada de dados, alias até colocar o scrollbox desta interface com todos os objetos em outra MsDialog ou Wizard é simples. Vejam o exemplo abaixo, boa sorte! Rleg. //---------------------------------------------------------- // Função exemplo utilizando a função ParamBox() //---------------------------------------------------------- User Function xParamBox() Local aRet := {} Local aParamBox := {} Local aCombo := {"Janeiro","Fevereiro","Março","Abril","Maio","Junho","Julho","Agosto","Setembro","Outubro","Novembro","Dezembro"} Local i := 0 Private cCadastro := "xParambox" // ---------------

Protheus :: Chamando Funções do Menu Diretamente e sem a Necessidade de Login

Ferne$ perguntou: "...é possível abrir alguma rotina do sistema sem solicitar login ao usuário, como por exemplo a rotina MATA010..." Sim Ferne$, é possível sim. Abaixo um Exemplo para a Chamada à função MATA010 sem a necessidade de Login no sistema. #INCLUDE "PROTHEUS.CH" #INCLUDE "TBICONN.CH" /*/ Funcao: MATA010Ex Data: 30/04/2011 Autor: Marinaldo de Jesus Descricao: Executar a Funcao MATA010 diretamente sem a necessidade de LOGIN no Protheus Sintaxe: 1 ) U_MATA010Ex ( Chamada diretamente na Tela de Entrada do Sistema ) ; ou 2 ) totvsclient.exe -q -p=u_MATA010Ex -a=01;01 -c=rnp_local -e=rnp -m -l ( Chamada Via Linha de Comando ) /*/ User Function MATA010Ex( cEmpFil ) Local aEmpFil Local bWindowInit := { || __Execute( "MATA010()" , "xxxxxxxxxxxxxxxxxxxx" , "MATA010" , "SIGAFAT" , "SIGAFAT", 1 , .T. ) } Local cEmp Local cFil Local cMod Local cModName := "SIGAFAT" DEFA

BlackTDN :: Customizando a interface de Login no Protheus e by You

A publicação “ BlackTDN :: By You e sua nova tela de login ”  de nosso amigo OBona deu o que falar e, em função disso, esse que a muito não vos escreve resolveu criar uma versão onde será possível personalizar, “por completo”, a tela de login no Protheus/by You. Considerando que OBona já havia “mapeado, identificado e customizado” as imagens peguei-as emprestadas para o exemplo que se segue: O primeiro passo para a customização “total” da interface de login do Protheus/by You será implementar o “Ponto de Entrada” ChgPrDir (Diretório de impressão) . Usaremos esse PE juntamente como programa U_FindMsObject.prg (apresentado pela primeira vez em: Protheus :: ADVPL : The Container : Presents Pandora's box ). Diferente do exemplo proposto por OBona, que substitui, durante o processo de compilação, as imagens padrões do sistema (excluindo-as) por imagens customizadas (com o mesmo nome) este novo exemplo mantém, no RPO, as imagens padrões adicionando novas imagens customizadas que serã