4D v19

On 4D Mobile Authentication database method

Página Inicial

 
4D v19
On 4D Mobile Authentication database method

On 4D Mobile Authentication database method 


 

$1, $2, $3, $4 -> On 4D Mobile Authentication database method -> Resultado 
Parâmetro Tipo   Descrição
$1  Texto in Nome de usuário
$2  Texto in Senha
$3  Booleano in True = modo Digest, False = modo Basic
$4  Texto in Endereço IP do caller
Resultado  Booleano in True = pedido aceito, False = pedido rejeitado

O On 4D Mobile Authentication database method lhe permite controlar de forma personalizada a abertura das sessões REST em 4D. Este método banco de dados é automaticamente chamado quando uma nova sessão é aberta por uma datastore remota (com o comando Open datastore ) 


Quando a solicitação de abertura de sessão REST é recebida, os identificadores de conexão estão no cabeçalho da solicitação. O On 4D Mobile Authentication database method é chamado para que possa avaliar estes identificadores. Pode utilizar a lista de usuários da base 4D ou pode utilizar sua própria tabela de identificadores.

Importante: Quando On 4D Mobile Authentication database method está definido (ou seja, quando contém código), 4D lhe delega plenamente o controle das solicitações REST: qualquer ajuste realizado utilizando o menu "Leitura/Escritura " da página Web/4D Mobile das Propriedades da base se ignora (ver o manual de Desenho).

O método base recebe dois parâmetros de tipo de texto ($1 e $2)  e um valor booleano ($3), passado por 4D, e devolve um booleano, $0. Deve declarar estes parâmetros da seguinte maneira:


  // Método base On 4D Mobile Authentication</p> <p>C_TEXT($1;$2)
 C_BOOLEAN($0;$3)
 ... // Código para o método

$1 contem o nome do usuário e $2 a senha utilizada para a conexão. 

A senha ($2) pode ser recebida em claro ou em forma hash, dependendo do modo utilizado para a petição. Este modo é indicado pelo parâmetro $3 para permitir realizar o processo apropriado:

  • Se a senha é enviada em claro (modo Basic), $3 devolve False.
  • Se for enviado em forma hash (modo Digest), $3 devolve True.

Quando o pedido de conexão REST provém do comando Open datastore, a senha se envia sempre em forma de hash.

O endereço IP da chamada ($4) é útil quando quiser filtrar certos endereços IP por exemplo. 

Quando os pedidos são enviados desde um navegador ou desde qualquer cliente web diferente a Wakanda Server, é responsabilidade do programador gerenciar a autenticação da página HTML/JavaScript original incluindo nos cabeçalhos HTTP os campos "username-4D" e "password-4D". Neste caso, a senha deve ser enviada em claro a 4D (utilizar SSL para evitar o risco de intercepção de um terceiro).

Deve controlar os identificadores da conexão 4D Mobile no método base. Geralmente, se comprova o nome e a senha utilizando uma tabela de usuários personalizada. Se os identificadores são válidos, passe True em $0. A solicitação é aceita; 4D a executa e devolve o resultado em JSON.
Caso contrário, passe False em $0, neste caso, a conexão é rejeitada e o servidor devolve um erro de autenticação ao remetente.

Se o usuário é referenciado na lista de usuários 4D da base, pode comprovar a senha diretamente através da seguinte instrução:

 $0:=Validate password($1;$2;$3)

O comando Validate password foi estendido para aceitar um nome de usuário como primeiro parâmetro, assim como um parâmetro opcional que indica se a senha se expressa em forma hash.

Se deseja utilizar sua própria lista de usuários externos para a lista da base 4D, pode guardar suas senhas em forma hash utilizando o mesmo algoritmo que o utilizado por 4D quando se envia a solicitação de conexão a On 4D Mobile Authentication database method em $2. Para gerar o hash para uma senha utilizando este método, pode escrever:

 $HashedPasswd :=Generate digest($ClearPasswd ;4D digest)

O comando Generate digest aceita 4D digest como algoritmo de hashing, correspondente ao método utilizado por 4D para sua gestão interna de palavras chaves.

Este exemplo só aceita o usuário "admin" com a senha "123" que não corresponde a um usuário 4D:

  //On REST Authentication database method
 C_TEXT($1;$2)
 C_BOOLEAN($0;$3)
  //$1: usuário
  //$2: senha
  //$3: modo digest
 If($1="admin")
    If($3)
       $0:=($2=Generate digest("123";4D digest))
    Else
       $0:=($2="123")
    End if
 Else
    $0:=False
 End if

Este exemplo exclui uma IP (as senhas são hashed com o algoritmo digest de 4D em Usuarios da dataclass):

  // Método banco de dados On REST Authentication<br />C_TEXT($1;$name;$2;$password)<br />C_TEXT($4;$ip)<br />C_BOOLEAN($0;$result;$3;$digest)<br />C_OBJECT($user)<br /><br />$name:=$1<br />$password:=$2<br />$digest:=$3<br />$ip:=$4<br /><br />$result:=False<br /><br />If ($ip#"123.45.67.89") //IP excluído<br />$user:=ds.Users.query("name=:1";$name).first()<br />// As senhas são hashed com o algoritmo digest de 4D nos Usuarios de dataclass<br />If ($user#Null)<br />If ($digest  &  ($user.password=$password))<br />$result:=True<br />End if <br />End if <br />End if<br /><br />$0:=$result

Neste exemplo, manejamos igualmente os usuarios 4D:

  //Método base Sur authentification REST
 C_TEXT($1;$name;$2;$password)
 C_BOOLEAN($0;$result;$3;$digest)
 C_OBJECT($user)
 
 $name:=$1
 $password:=$2
 $digest:=$3
 
 $result:=False
 
 $user:=ds.Users.query("name=:1";$name).first()
  // Senhas são hashed na classe de dados Users
 If($user#Null)
    If($digest &($user.password=$password))
       $result:=True
    End if
 Else // Gerar os usuários 4D
    $result:=Validate password($name;$password;$digest)
 End if
 $0:=$result

 
PROPRIEDADES 

Produto: 4D
Tema: Métodos banco de dados
Número 3367

 
HISTÓRIA 

Criado por: 4D v14
Renomear: 4D v14 R3
Modificado: 4D v18
Renomear: 4D v18

 
ARTICLE USAGE

Manual de linguagem 4D ( 4D v19)
Manual de linguagem 4D ( 4D v19.1)