Utilizando o ASP.NET Identity com banco de dados Oracle

O que é o ASP.NET Identity?

O sistema ASP.NET Identidade é projetado para substituir os sistemas de autenticação e autorização simples anterior ASP.NET Membership. Ele inclui suporte a perfil, integração OAuth, trabalha com Owin, e está incluído nos modelos ASP.NET fornecido com Visual Studio.

Utilizando o ASP.NET Identity com Oracle.

A configuração é basicamente simples, vamos primeiro criar um novo projeto ASP.NET Web Application no Visual Studio.

oracle_1

Após criar o projeto, agora temos que fazer referência dos pacotes do Oracle para utilização do Identity, vamos instalar o pacote “Oracle.ManagedDataAccess.EntityFramework”.

oracle_2

Por padrão este pacote vai instalar também o “Oracle.ManagedDataAccess”.

oracle_3

É bom verificar o pacote “Oracle.ManagedAccess” se está na última versão, caso não esteja é bom fazer o update.

oracle_4

oracle_5

Configuração da aplicação

Após isso os pacotes estarão instalados, agora é ajustar a string de conexão, vamos até o Web.config e se observarmos temos 2 connections string, onde a primeira é a padrão “DefaultConnection” e a outra é a que o pacote do Oracle criou “OracleDbContext”, eu removi a conexão padrão e deixei somente a do oracle.

Próximo passo é configurar a connectionString, onde fica da seguinte forma:

connectionString="Data Source=(DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521)))(CONNECT_DATA=(SID=XE)));Persist Security Info=True;User ID=USUARIO;Password=SENHA;"

Lembrando, que para o exemplo estou utilizando a versão XE do oracle na própria máquina de desenvolvimento.

O próximo passo é ajustar o contexto do Identity para utilizar a string de conexão do oracle, isso é feito ajustando o arquivo IdentityModels.cs, onde o ApplicationDbContext deve ficar da seguinte forma:

public ApplicationDbContext()
      :base("OracleDbContext", throwIfV1Schema: false)
{
}

Onde devemos trocar o DefaultConnection pelo OracleDbContext, estaremos apontando agora o contexto para a string de conexão oracle (Pode-se fazer o processo inverso também, renomear a connectionstring para DefaultConnection, neste caso não haveria modificação no método acima).

Se você tentar rodar a aplicação vai ver que a mesma vai conectar ao banco de dados, mas vai retornar o seguinte erro:

oracle_6

 

Isso acontece por conta da rotina que cria as tabelas do Identity, que tenta usar o usuário dbo que é padrão no Sql Server, para poder fazer o contexto entender que você quer usar seu usuário de banco Oracle devemos sobrescrever o método “OnModelCreating” e informar o usuário no “HasDefaultSchema”, conforme abaixo:


protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
     modelBuilder.HasDefaultSchema("USUARIO");
     base.OnModelCreating(modelBuilder);
}

Testando a aplicação

Pronto, com esse pequeno ajuste se compilarmos o projeto, o Identity já vai conectar ao banco de dados e criar as tabelas que ele utiliza, e desse ponto em diante segue o processo padrão de utilização do Identity.

oracle_7

 

Registro de usuário:

oracle_8

 

Usuário autenticado.

oracle_9

 

É isso, a configuração é bem simples, as vezes o que os usuários podem ter problema é na configuração do OnModelCreate para conexão com o banco Oracle.

Espero que tenha sido proveitoso e qualquer dúvida deixe nos comentários.

O código do Exemplo está disponível no GitHub

Referência:

http://www.asp.net/identity

Posted in .NET, Blog and tagged , , , .

8 Comments

  1. Olá Thiago,
    Fiz a configuração no OnModelCreating, porém continuo com o erro “ORA-01918: o usuário ‘dbo’ não existe”.
    O link do código de exemplo no GitHub está indisponível, você poderia disponibilizá-lo, por favor?

  2. Boa tarde Thiago, fiz da forma como você colocou e funcionou perfeitamente, no entanto ao entrar no sql plus conectando com o mesmo usuário que usei para criar as tabelas pela aplicação e tentar executar um select recebo a mensagem do Oracle dizendo que a tabela não existe, no entanto as tabelas aparecem listadas na tabela all_tables com o owner correto, você já teve esse problema?

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *