Criar uma autenticação personalizada no Oracle Apex é realmente simples. Neste exemplo, além de criar o esquema de autenticação personalizada, vamos utilizar o pacote DBMS_CRYPTO para criptografar os dados na tabela, tornando assim mais seguro.
Lembre-se, para utilizar o pacote DBMS_CRYPTO, é necessário que o usuário de banco tenha permissão de executar o pacote "SYS.DBMS_CRYPTO".
Para atribuir permissão, basta executar o comando abaixo:
GRANT EXECUTE ON DBMS_CRYPTO TO ESQUEMA;
Primeiramente, vamos criar uma tabela USUARIO:
create table USUARIO
(
cd_usuario NUMBER not null,
nm_usuario VARCHAR2(15),
senha VARCHAR2(4000),
st_usuario VARCHAR2(1),
constraint PK_USUARIO primary key (CD_USUARIO)
);
Agora vamos criar o pacote PACK_AUTENTICACAO:
CREATE OR REPLACE PACKAGE PACK_AUTENTICACAO IS
FUNCTION AUTENTICAR(p_username IN VARCHAR2
,p_password IN VARCHAR2) RETURN BOOLEAN;
END PACK_AUTENTICACAO;
/
CREATE OR REPLACE PACKAGE BODY PACK_AUTENTICACAO IS
FUNCTION OBFUSCAR(TEXT_IN IN VARCHAR2) RETURN VARCHAR2 IS
BEGIN
RETURN DBMS_CRYPTO.HASH(UTL_I18N.STRING_TO_RAW(TEXT_IN, 'AL32UTF8' ),
4);
END;
FUNCTION AUTENTICAR(P_USERNAME IN VARCHAR2
, P_PASSWORD IN VARCHAR2) RETURN BOOLEAN IS
L_OBFUSCATED_PASSWORD USUARIO.SENHA%TYPE;
L_VALUE NUMBER;
BEGIN
l_obfuscated_password := OBFUSCAR(text_in => p_password);
BEGIN
SELECT 1
INTO l_value
FROM USUARIO
WHERE upper(USUARIO.NM_USUARIO) = upper(p_username)
AND USUARIO.SENHA = l_obfuscated_password
AND USUARIO.ST_USUARIO = 'A';
EXCEPTION
WHEN OTHERS THEN
l_value := 0;
END;
RETURN l_value = 1;
END AUTENTICAR;
END PACK_AUTENTICACAO;
Note que os parâmetros de entradas do procedimento AUTENTICAR obrigatoriamente deve ter P_USERNAME e P_PASSWORD para compatibilidade com o Apex. Assim, não será preciso alterar a tela de login.
Agora, acesse "Authentication Schemes" em "Shared Components" e clique em "Create" para criar um novo esquema de autenticação.
Na tela a seguir, selecione a opção "Based on a pre-configured scheme from the gallery" e clique em "Next":
No campo "Name" informe um nome para a autenticação e selecione a opção "Custom" em "Scheme Type". No campo "Authentication Function Name" informe o procedimento criado acima "PACK_AUTENTICACAO.AUTENTICAR" e clique no botão "Apply Changes":
Agora vamos criar um novo usuário "ADMIN" com senha 12345:
INSERT INTO USUARIO (CD_USUARIO,
NM_USUARIO,
SENHA,
ST_USUARIO)
VALUES (1, 'ADMIN', DBMS_CRYPTO.HASH(UTL_I18N.STRING_TO_RAW('12345', 'AL32UTF8' ), 4), 'A');
COMMIT;
Basta fazer um select na tabela USUARIO:
Pronto, agora basta logar no seu aplicativo com o usuário ADMIN e senha 12345.
:D
Comentários
Postar um comentário