Este é o site histórico da documentação 4D. As documentações estão sendo movidas progressivamente para developer.4d.com

Página Inicial

 
4D v19.8
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
 C_TEXT($1;$name;$2;$password)
 C_TEXT($4;$ip)
 C_BOOLEAN($0;$result;$3;$digest)
 C_OBJECT($user)
 
 $name:=$1
 $password:=$2
 $digest:=$3
 $ip:=$4
 
 $result:=False
 
 If($ip#"123.45.67.89") //IP excluído
    $user:=ds.Users.query("name=:1";$name).first()
  // As senhas são hashed com o algoritmo digest de 4D nos Usuarios de dataclass
    If($user#Null)
       If($digest &($user.password=$password))
          $result:=True
       End if
    End if
 End if
 
 $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

 
CONTEÚDO DA PÁGINA 
 
HISTÓRIA 

Criado por: 4D v14
Renomear: 4D v14 R3 (On 4D Mobile Authentication database method)
Modificado: 4D v18
Renomear: 4D v18 (On 4D Mobile Authentication database method)

 
ARTICLE USAGE

Manual de linguagem 4D ( 4D v19)
Manual de linguagem 4D ( 4D v19.1)
Manual de linguagem 4D ( 4D v19.4)
Manual de linguagem 4D ( 4D v19.5)
Manual de linguagem 4D ( 4D v19.6)
Manual de linguagem 4D ( 4D v19.7)
Manual de linguagem 4D ( 4D v19.8)