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.
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”.
Por padrão este pacote vai instalar também o “Oracle.ManagedDataAccess”.
É bom verificar o pacote “Oracle.ManagedAccess” se está na última versão, caso não esteja é bom fazer o update.
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:
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.
Registro de usuário:
Usuário autenticado.
É 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
Cara, muito bom seu post.
Me ajudou muito.
vlw
Obrigado pelo comentário!
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?
Olá James, fie o ajuste do link do git, estava quebrado. Já com questão a mensagem, o OnModelCreating tem que ter o “override” se não o método vai chamar o original!
Deu certo, valeu Thiago! =)
Por nada cara, precisando é só chamar!
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?
Olá Mauricio, não sei se já achou o problema, tenta fazer a select no sqlplus da seguinte forma select * from Owner.Tabela;