O Sistema de identidade ASP.NET é uma nova coleção de componentes de software para oferecer suporte à autenticação e à autenticação em aplicativos ASP.NET. Ele oferece aprimoramentos significativos em relação ao ASP.NET Membership e ao Simple Membership anteriores e tem como objetivo facilitar o suporte a repositórios de apoio não relacionais, como o Couchbase Server. Além de autenticação e autorização, ele oferece armazenamento de perfis, autorização baseada em função e reivindicações, suporte a logins sociais, como Facebook e Twitter, e suporte a OWIN... ele não depende mais do namespace System.Web.
O Couchbase ASP.NET Identity Provider pretende ser um provedor "completo" com suporte a quase todos, se não todos, os recursos da ASP.NET Identity API. Neste Developer Preview (DP), apenas a parte de autenticação foi testada; nas versões subsequentes, serão adicionadas a função e a autorização baseada em reivindicações, bem como a integração com provedores de mídia social de terceiros por meio de Single Sign-On (SSO), além de recursos como autenticação de dois fatores por SMS e e-mail. Nesta postagem
mostraremos como integrar o DP do provedor de identidade Couchbase ASP.NET a um aplicativo da Web ASP.NET MVC.
Primeiros passos
O pacote está disponível no NuGet ou você mesmo pode criá-lo a partir do repositório no Github, que pode ser encontrado aqui. Para este blog, usaremos os pacotes publicados pelo NuGet.
Usando o Visual Studio 2013 (ou talvez 2015), crie um novo aplicativo da Web MVC da seguinte forma:
Você pode dar o nome que quiser; eu o chamei de CouchbaseIdentity. Clique em "OK" e selecione MVC na próxima caixa de diálogo.
Clique em "OK" novamente e o Visual Studio criará o projeto MVC para você. Por padrão, o Visual Studio usará o provedor de identidade do Entity Framework. Como queremos usar o provedor de identidade do Couchbase, precisamos remover a dependência do pacote do provedor do Entity Framework, adicionar referência ao pacote do Couchbase Identity e, em seguida, substituir todas as referências a using Microsoft.AspNet.Identity.EntityFramework; por Couchbase.AspNet.Identity.
Para alterar a dependência do pacote, abra o NuGet Package Manager, localize o pacote Microsoft ASP.NET Identity EntityFramework e desinstale-o:
Nesse ponto, você terá que reiniciar o Visual Studio. Em seguida, vá para a guia "Online" e altere a lista suspensa para "Include Prerelease" e digite "couchbase" na caixa de texto de pesquisa:
Selecione o Couchbase ASP.NET Identity e clique em "Install" (Instalar) e "Close" (Fechar) para fechar a caixa de diálogo.
Atualização das dependências do pacote
Agora que você trocou os pacotes padrão do provedor de identidade do Entity Framework e os substituiu pelas dependências e pelo pacote do Couchbase ASP.NET Identity, é necessário atualizar o projeto para usar o novo provedor.
Primeiro, examine e substitua todas as referências a usando Microsoft.AspNet.Identity.EntityFramework; com usando Couchbase.AspNet.Identity;. A maneira mais fácil de fazer isso é uma simples busca e substituição (Ctrl F).
Em seguida, em IdentityModels.cs, altere a classe ApplicationDbContext para derivar de ThrowableBucket em vez de IdentityDbContext e, em seguida, substitua o construtor de base para que o Bucket que você escolheu para armazenar as informações de identidade seja passado. Optei por armazenar minhas informações de identidade no bucket "padrão"; você poderia criar um bucket separado, se quisesse:
Observe que o "ThrowableBucket" é um wrapper em torno de alguns métodos CRUD do CouchbaseBucket que altera um pouco o comportamento do SDK; falhas de operação são lançadas. Em versões futuras, isso pode mudar!
Por fim, abra o arquivo Global.asax e adicione o código para inicializar o SDK do Couchbase, que é usado pelo provedor de identidade ASP.NET do Couchbase:
O ClusterHelper é uma classe auxiliar do Couchbase .NET SDK que facilita o gerenciamento de buckets e referências. Recomenda-se que você inicialize o ClusterHelper em Application_Start e feche-o em Application_End. Depois de concluir essa etapa, o aplicativo Web estará pronto para usar o Couchbase como um armazenamento de backup para identidade e perfis!
Testando-o!
Depois de concluir as etapas acima, você pode testar a integração executando o aplicativo (clique com o botão direito do mouse>debug=>Start new instance) e navegando até a página de registro:
Preencha seu e-mail, senha e confirme sua senha, depois clique em "Register" (Registrar).
Supondo que tudo tenha ocorrido bem, você deverá ser redirecionado para a página inicial e verá a mensagem "Hello ....". Agora você está autenticado!
Como o perfil é modelado no Couchbase
O provedor de identidade padrão é baseado em uma série de tabelas relacionais com chaves estrangeiras que vinculam os dados. O provedor Couchbase ASP.NET adota a abordagem NoSQL e armazena os dados como documentos JSON e usa "índices manuais" para índices secundários nos casos em que a chave para buscar os dados não é um índice primário.
O documento principal tem a seguinte estrutura:
É um documento bastante simples; em quase todos os casos, usamos a "incorporação" para armazenar relacionamentos como funções e reivindicações (falaremos sobre isso em uma postagem posterior do blog!). Para fazer uma pesquisa em um campo desse documento, criamos um segundo documento binário que associa o endereço de e-mail do perfil à chave primária (914dc...); isso é semelhante a um conceito de modelagem chamado "referência".
Poderíamos ter usado consultas N1QL, o que tornaria os índices secundários "manuais" obsoletos, mas a intenção é oferecer suporte ao Couchbase Server 3.0 e superior; o N1QL será um recurso do Couchbase Server 4.0, que será lançado ainda este ano.
Como obtê-lo:
O Couchbase ASP.NET Identity Provider está disponível como um pacote no NuGet ou pode ser criado diretamente a partir da fonte usando o repositório do Github. Se você quiser contribuir, as solicitações pull são sempre bem-vindas. Se encontrar um bug, crie um tíquete no Jira e você será notificado sobre o status atual.