ASP.NET Identity – Tutorial Completo – Demos, Vídeo, Slides

O ASP.NET Identity é o novo componente de Membership do ASP.NET que já está na versão 2.1, aprenda neste tutorial as suas funcionalidades, tecnologia base e como implementá-lo e aproveitar todos os recursos.

ASP.NET Identity

O ASP.NET Identity foi lançado junto com o ASP.NET MVC 5 e o Visual Studio 2013 e logo foi muito bem aceito pela comunidade técnica, pois possui uma arquitetura bem aberta, limpa e modularizada de forma que proporciona grande facilidade de customização e testabilidade.

Historicamente o ASP.NET forneceu 4 componentes de Membership

  • (2002 – 2005) – Não possuía nenhum componente
  • (2005 – 2010) – Membership Provider
  • (2010 – 2012) – Simple Membership
  • (2012 – 2013) – Universal Providers
  • (2013 – Hoje)  – ASP.NET Identity

Características do ASP.NET Identity desde a primeira versão

  • Parte do ONE ASP.NET
  • Customização do perfil do usuário simplificado (escrito em Code First)
  • Controle de persistência de dados (EF ou outros)
  • Totalmente testável (Unity Tests)
  • Role Provider (separação de acessos por perfil)
  • Claims Based
  • Autenticação com redes sociais (FB, Twitter, Google+ e Microsoft Accounts)
  • Integraçao com Active Directory (On-Premisses e Azure)
  • Integração com OWIN (OWIN Middleware based)
  • Entregue via NuGet (Nuget Everywhere)

Alguns aspectos chamaram muito a atenção, como por exemplo ser baseado em Claims (Claims Based), ter sido projetado como um OWIN Middleware e possuir a capacidade de integrar facilmente com as redes sociais através do OAuth 2.0 e OpenID

É possível também integrar com Yahoo e LinkedIn utilizando este pacote adicional desenvolvido pela comunidade técnica. Para customizar a integração com seu próprio mecanismo OAuth, siga este artigo.

Apesar de ter sido muito bem aceito, mesmo assim o ASP.NET Identity recebeu algumas críticas, pois possuía poucos recursos e sua implementação necessitava algumas melhorias, podemos conferir isto no artigo do Brock Allen que escreveu seu próprio componente de Membership baseado nas frustrações que teve com o ASP.NET Membership e o SimpleMembership, além do recém lançado ASP.NET Identity.

Em 2014 o ASP.NET Membership ganhou novas funcionalidades nas suas versões (2.0 e 2.1) Muitas delas listadas como necessárias no artigo acima.

  • Two Factor Authentication
  • Account Lockout
  • Account Confirmation
  • Password Reset
  • Security Stamp (Sign out everywhere)
  • Primary Key extensible for Users and Roles
  • Support IQueryable on Users and Roles
  • Delete User account
  • IdentityFactory Middleware – CreatePerOwinContext (UserManager, DbContext, etc)
  • Enhanced Password Validator
  • SignInManager (Facilidade para aplicar features [Two Factor, Account Lockout, etc])

Recentemente o ASP.NET Identity tornou-se open-source, pois sua primeira versão não tinha ainda o código aberto, você pode ter acesso ao fonte no GitHub do ASP.NET Identity e acompanhar todas as novas implementações além de enviar pull-requests.

O ASP.NET Identity não funciona apenas com ASP.NET MVC, ele trabalha com todo o ecossistema do ASP.NET (MVC, WebAPI, WebPages, WebForms, SignalR).

Conhecer melhor o ASP.NET Identity poderá lhe fornecer muitas vantagens na hora de iniciar um novo projeto, pois não existirá a necessidade de criar um novo componente de identidade e autenticação, você também pode modernizar seu atual componente o tornando compatível com o ASP.NET Identity. Para migração consulte este artigo.

Um outro detalhe é que o ASP.NET Identity pode ser plugado em diversos providers, caso seu projeto não utilize Entity Framework, existe uma série de providers disponíveis.

  • MySQL
  • CodeFluent Entities
  • Azure Table Storage
  • CouchDB
  • Elastic Identity
  • MongoDB
  • Nhibernate
  • RavenDB
  • Redis

Confira mais detalhes sobre implementação dos providers neste artigo.

Para facilitar e apresentar com mais riqueza de detalhes eu gravei um vídeo de 02h40 horas e estou disponibilizando também slides de apresentação além do código fonte do projeto que eu utilizei nas demos.

Slides

Vídeo


* Assine meu canal no Youtube 🙂

Código Fonte

O código fonte está disponível no GitHub, qualquer bug ou sugestão envie uma issue ou pull-request.

Referências


Se você estiver interessado em conhecer mais e aprender como desenvolver aplicações com uma arquitetura responsável utilizando DDD, TDD, BDD, aplicando os princípios SOLID, diversos design patterns e escrevendo testes de unidade conheça meus cursos:

Vamos continuar a troca de experiências, deixe seu comentário abaixo, se gostou e concorda com o artigo compartilhe com seus colegas para transmitirmos o conhecimento para o máximo de pessoas possíveis.

118 ideias sobre “ASP.NET Identity – Tutorial Completo – Demos, Vídeo, Slides

  1. Ótimo conteúdo Eduardo, muito bom seu video explicativo

    Só fiquei com uma dúvida, quando você explicou as Roles, você falou que não era elegante e tal colocar [Authorize(Roles = “Admin”,”Outra”,”blabla”)] mas nas Clains seu filtro você faz praticamente da mesma forma, ou seja o dev deve sempre ir lá e add as Claims que ele quer.

    E também as Claims eu posso customizar ela? Por exemplo, falando em autenticação, Claim com nome “AdicionarUsuario”,”EditarUsuario”, existir a Claim AdicionarUsuario apenas quando o usuário estiver logado em empresa X e demais Claims em empresa Y

    No mais parabéns, simplesmente um dos melhores materiais sobre o assunto que já encontrei na internet.

    Abraço

    • Muito obrigado pelo feedback Rodrigo!

      A Role é um papel, por ex, apenas quem possuir a Role Admin pode excluir clientes, enquanto quem possui a Role Usuário pode visualizá-los, se caso surgir um novo papel no sistema como Coordenador (que no caso também pode excluir clientes), você precisaria adicionar a Role Coordenador na lista do [Authorize] de todas suas Controllers que cedem acesso à esse novo perfil, isso não é elegante.

      Se você usar a Claim “PodeExcluirCliente” não importa o papel, a funcionalidade é essa, você dá essa Claim para quem você quiser, pode entrar 100 novos perfis no sistema que você não precisará editar mais todas suas Controllers para aceitar um novo papel (Role).

      Sacou a diferença?
      Além do que os Claims são livres para uso, você pode portar neles mais informações do seu usuário ao invés de ir no BD buscá-los quando precisar, acontece muito disso e geralmente é resolvido com Sessions (elas são malignas, livre-se delas).

      Abraços.

      • Ficou claro Eduardo, Claims parece ser muito inovador e simples.

        Existe um limite de Claims que o usuário possa ter?

        Então seria muito o usuário ter(jogando alto) 1000 claims ? E carregar todas elas, dessa forma

        Existe alguma limitação em números?

          • Pensei em um cenário, aonde faria permissões de ações baseado em Claims, ou seja “Incluir/Alterar/Excluir/Etc” tudo baseado em Claims.Então em um sistema com um porte maior, haveria inúmeras Claims. Não sei se esse seria seu papel correto de usar Claims.

            Abraço

          • Pode ser assim não tem problemas ou você ainda pode criar uma Claim “PermissãoCadastroCliente” e usar nela um valor “Visualizar, Editar, Deletar, Incluir” para ser mais econômico e alterar o filtro para utilizar a validação (Contains) para verificar se o valor exigido para tal validação está dentro da string da Claim do usuário.

            Abs!

          • Olá Eduardo, só um feedback.

            Ao adicionar mais de 300 Claims (um teste que fiz) ele simplesmente não consegue carregar mais nenhuma claim, e não consegue se quer fazer autenticação.

            Deve haver essa limitação…algo assim

      • Eduardo, excelente tutorial! Já tinha lido muito conteúdo sobre o assunto mas nada como um vídeo que mostra de ponta a ponta, não só os cenários básicos, mas também casos de usos reais, um demo bem organizado, muito legal!
        Bom, outro Rodrigo aqui, mas com a mesma dúvida. Entendi a parte das Claims como uma coleção dinâmica de chave/valor atrelado ao usuário, o que é interessante, mas para o uso de autorização, que requer que você decore suas classses, mas ainda fica dependente de um nome “não-forte” assim como com os Roles, não?
        Ou a vantagem é que você não tem como mudar o nome de Claims de todo mundo pq o Claim nesse caso não é uma chave estrangeira, é apenas uma chave/valor?

        • Obrigado pelo feedback Rodrigo!

          A vantagem da Claim é que ela é intercambiável entre sistemas, vc decora com o nome da claim e não com o nome da role, isso permite que vc tenha menos manutenção de código caso alguma role muda, uma claim até pode estar dentro de uma role tbm.

          Vc pode entender como uma coleção de chave valor sim, nesse caso ele não possui PK, eu acho isso excelente.

          Abs.

      • Eduardo, parabéns pelo site, estou acompanhando todos e está sendo fantástico!
        Eu só estou com uma dúvida que é a mesma do Rodrigo:

        “Só fiquei com uma dúvida, quando você explicou as Roles, você falou que não era elegante e tal colocar [Authorize(Roles = “Admin”,”Outra”,”blabla”)] mas nas Clains seu filtro você faz praticamente da mesma forma, ou seja o dev deve sempre ir lá e add as Claims que ele quer.”

        Vi sua resposta aqui, assim como no vídeo você também da a mesma informação, mas mesmo assim ainda não consegui entender como posso criar novas claims para dar novas funcionalidades sem precisa alterar o [Authorize] do controller, visto que preciso do ClaimsAuthorize no controller, realmente estou confuso nessa parte. Se poder ter um pouco mais de paciência e explicar eu agradeço. 🙂
        Valeu.

        • Eduardo, pode deixar pra lá a pergunta eu entendi, finalmente, como funciona. 🙂
          Na prática a diferença é que vou adicionando as claims nas controllers, ou actions, em tempo de desenvolvimento, sem precisa me preocupar quem (o tipo de usuário final) que vai ter acesso a ação. Depois de pronto é só distribuir as claims, como você disse.
          Valeu!!!

    • Olá Thomas,

      Conforme já conversamos sua aplicação está ok e o seu ambiente está em uma única instancia de servidor, logo sugiro que teste sua app em outro server e entre em contato com seu provedor de serviço em busca de alguma orientação.

      Abs!

  2. Bom noite, Eduardo.
    Você comentou que o exemplo não está utilizando um Design de Arquitetura. Você sugere qual link/artigo que demonstre um Design de arquitetura apropriado para o uso do Asp.net Identity?
    Muito obrigado e parabéns pelo tutorial. Abraços.

    • Olá Leonardo, obrigado pelo feedback.

      É um assunto complexo, pois arquitetura não é bem uma receita, você precisa definir uma arquitetura que se enquadre bem ao seu projeto, ao porte, complexidade e missão dele.
      O ASP.NET Identity se encaixa em qualquer arquitetura, basta você saber isolar as dependências, eu no caso utilizo bastante o padrão DDD (Domain Driven Design) e nesse caso utilizo um projeto separado para o Identity para evitar que ele suje as outras camadas com dependências do EF por ex.

      Abs!

  3. Muito bom Eduardo, eu havia comentado em outro post sobre identity e você disse que estava fazendo um material bem completo, e põe completo nisso.
    Muito bom mesmo, eu fiz todo meu Identity na “unha” :'(.
    Agora não da pra voltar atrás, mas, felizmente a microsoft atendeu as nossas expectativas e pedidos.

    Obrigado.

  4. Eduardo, parabéns pelo material disponibilizado! Muito bom mesmo!

    Ultimamente venho lendo sobre Identity.
    Quero desenvolver uma web api que poderá ser consumida por spa’s e também por aplicativos nativos android, ios. A api não poderá ser acessada por “qualquer um” então optei pelo uso do Identity. Por enquanto estou aprendendo e realizando testes. Nesses testes implemento o uso do OAuthAuthorizationServerProvider. Até que encontrei material em inglês e exemplos (nesse site http://bitoftech.net/ um bom material), mas quando aprofundo nos estudos leio várias advertências e possíveis falhas graves de segurança.
    Por exemplo: pelo que eu li não há uma maneira segura de armazenar o access_token no client/front-end para recuperá-lo via javascript

    Você teria materiais ou dicas para me indicar

    E uma questão que ainda não encontrei é se os cookies(no caso do CookieAuthentication) são marcados com HttpOnly

    Desde já agradeço!

  5. Eduardo, excelente tutorial!!! Gostaria de saber se existe alguma expectativa do Asp.Net Identity utilizar a autorização por perfil de acesso. Deixa eu explicar melhor.

    Supondo que meu sistema tenha centenas regras de autorização, ou seja, que para cada função seja possível autorizar ou não sua execução. A manutenção do usuário fica complicada onde para cada usuário seria necessário fazer a associação de Clains correspondentes ao perfil do usuário.

    O interessante seria ter pools de Clains e o usuário estaria associado a um ou mais pools. O que tornaria a adminsitração do usuário muito mais fácil.

    Há alguma demo/tutorial que você conheça que faça esse tipo de abordagem?

    No inicio do Asp.Net (v2.0) desenvolvi um sistema que tinha essa abordagem. Estou reaprendendo com o MVC e estou muito confuso em como implementar dessa forma.

    Desde já muito obrigado.

    • Muito obrigado pelo feedback Emerson!

      Você pode criar um Claim com um array “Perm1,Perm2,Perm3” e dar o nome dessa Claim como se fosse um módulo ou algo assim, centraliza várias em uma só e monta conforme for checando as permissões numa tela por ex.

      Você pode criar uma Claim que representa um conjunto de Claims tbm, fica tudo ao seu controle.

      Abs!

  6. Fala Eduardo,
    excelente seu tutorial, realmente o mais completo que vi ate agora. Me fez decidir em usar o identity em meu projeto. Mas agora to com um problema. Como incluir o Identity em um projeto que ja esta em andamento? Já inclui a estrutura toda mas ele nem chama o Startup.cs

    Abraços

  7. Olá Eduardo, ótimo tutorial, deu pra entender bem o funcionamento do Identity, só tenho uma dúvida, na minha solução tenho vários projetos/camadas, sendo as principais a API, Site, DB e Serviços, e hoje somente a camada de Serviços é que conversa com a camada DB, e pelo que eu entendi o Identity também tem que ter acesso direto à camada DB certo? Ou existe uma maneira decente do Identity passar pelo Serviço?

  8. Primeiramente, gostaria de parabeniza-lo pelo seu trabalho e dedicação para compartilhar seu conhecimento. Estou impressionado com a qualidade do conteúdo e didática. Bom, Eduardo, tenho um projeto que já esta com o entity framework no modelo database first. Como Eu poderia aplicar esse recurso do indentity com o entity database first. Quero lembrar que estou iniciando com o entity framework 6.1, não tenho muita experiência ainda. Adotei esse modelo database first pois queria ter um dominio maior por parte do banco. Estou utilizando o sql server 2012. Agradeço desde já.

  9. Muito bom tutorial. Obrigado por ter partilhado.

    Precisava de uma ajuda para me indicar onde ficam localizadas algumas mensagens de erro de autenticação, por exemplo:
    “Passwords must have at least one non letter or digit character. Passwords must have at least one digit (‘0′-‘9′). Passwords must have at least one uppercase (‘A’-‘Z’).”

    Vou usar a culture num projecto e queria evitar o aparecimento destas mensagens na lingua diferente da da culture.

    Muito obrigado e um abraço.

  10. Eduardo, parabéns pelo tutorial. Muito bom. Parabéns pela iniciativa de passar seu conhecimento para a comunidade.

    Mas tenho uma dúvida. Como posso fazer pra que eu use as Claims para fazer o filtro do que o usuário pode acessar no sistema ? Parecido com o que você faz no seu tutorial. Mas não consegui criar esse tipo de filtro da forma que fez ai. Como eu posso prosseguir, usando seu código ? Ou seja, o que eu posso usar ?

    • Fala Érik!

      Muito obrigado pelo feedback!
      Não sei se entendi bem, mas desde que esteja utilizando Identity você pode usar exatamente da forma que fiz no ex.

      Abs!

  11. Eduardo, primeiramente parabéns e muito obrigado pelo tutorial.
    Tenho uma dúvida, percebi que quando efetuo o login o meu usuário continua logado mesmo saindo dá página ou fechando o navegador. Gostaria de saber como eu faço o logoff dos usuários quando eles fecharem a página e/ou os navegadores.
    Abraços.

  12. Eduardo, primeiramente quero agradecer todo o material disponibilizado em seu site (videos e posts), venho acompanhando e estudando cada post, tem sido super útil no desenvolvimento do meu projeto, super obrigado!

    Eduardo, utilizo o padrão DDD em meu projeto. Tenho um projeto MVC na camada de Presentation e um projeto WebAPI na camada DistributedServices. Sendo que a camada de DistributedServices, comunica com a camada de Application e assim por diante…

    Vou adicionar o Identity em meu projeto, sendo que preciso autenticar o usuário logado na na camada Presentation e DistributedServices. Estou utilizando o code first entity framework sendo que a Migration e tudo referenciado a data esta na camada de Infrastructure e todas minhas entidades e regra de negócios estão na camada de Domain. Pode me sugerir como adicionar Identity para atender meu projeto da melhor forma seguindo o padrão DDD? Utilizei como base seu vídeo de DDD, para montar meu projeto, então pode imaginar essa arquitetura do vídeo que foi postado em seu blog.

    Obrigado!

  13. Eduardo,

    Primeiro gostaria de parabeniza-lo pelo conteúdo, venho estudando seus artigos e eles são muito bons.

    Estudei seu artigo sobre arquitetura (Tutorial ASP.NET MVC 5 + DDD + EF + AutoMapper + IoC + Dicas e Truques) e estudei este.

    Agora tenho uma dúvida, quero utilizar o Identity dentro da arquitetura com DDD que você ensinou. Onde é o local indicado para conter as classes relacionadas ao Identity ? Imaginei criar um projeto na pasta CrossCuting.

    Outra dúvida, o DBContext do projeto deve ser o mesmo tanto para o Identity quanto para o banco ?

    • Fala Odair!

      Muito obrigado pelo feedback!
      Exatamente, CrossCutting é para isso, um projeto isolado dentro desta divisão.

      Eu gosto de isolar o Identity em um contexto só dele, acredito ser uma boa prática.
      Abs!

  14. Boa tarde eduardo, sempre sigo seus posts e tutoriais, são ótimos para aprendizado.
    estou com uma dúvida que acho que é de muitos também, quando eu assino um controller com a claim, e o valor, ele chama o filtro e em seguida o filtro responde True ou false, porém aonde que eu seto o redirecionamento da claim para uma página distinta após o filtro responder false… Estou estudando a estrutura, e com a mesma que voce criou apliquei em uma estrutura de DDD…. abraço

    • Obrigado pelo feedback Natan.

      Vc pode criar o comportamento de responder para uma página distinta dentro do próprio filtro. Por padrão ele joga na página de login, porém vc pode determinar para onde vai no caso da autorização não for concedida.

      Abraços.

  15. Olá Eduardo.
    Primeiramente, parabéns pelo seu trabalho. Seu conteúdo é de grande valor para todos nós da área.

    Estou iniciando um projeto SaaS, e no caso, o usuario só poderá acessar os dados da empresa dele.

    Então minha pergunta é o seguinte: A melhor prática para isso, visando desempenho e segurança, seria captar o id da empresa numa claim ao fazer o login, e depois utilizá-lo nas minhas consultas através da cláusula where?

    Muito obrigado, desde já.
    Um abraço.

  16. Boa tarde Eduardo, tudo bem?

    Mais um excelente artigo que me ajudou bastante!

    Fiquei na esperança de baixar o código fonte mas não consegui :/

    Ele não está mais disponível?

    Um abraço e obrigado.

    • Pois é, eu também não consegui baixar. Parece que está indisponível.
      Será que alguém que conseguiu baixar poderia upar em outro servidor ?

  17. Eduardo, lembro que no falecido Membership existia uma tabela “Application”, e um User sempre pertencia a um application.

    Isso deixava bem fácil criar um cenário multi-tenant.

    No Identity essa tabela não existe. O jeito é implementar na raça? Sabe se existe algo pronto ou alguma dica a respeito?

    Valeu!

  18. Ótimo artigo!
    Gostaria de utilizar Identity 2 em aplicativo WinForms, juntamente com ASP.Net MVC.
    Criei um projeto Class Library onde ficam os modelos e autenticação e estou utilizando em outro projeto ASP.Net MVC.
    É possivel utilizar a mesma autenticação em projeto WinForms?
    Se sim, teria alguma dica?
    Muito obrigado

  19. Eduardo, parabéns pelo vídeo, mais um excelente conteúdo.

    Estou estudando o código para distribuí-lo no DDD, mas fiquei com uma dúvida. O que fazer com o IdentityModels? Seria mais uma classe do meu Identity na infra?

    Abraço.

  20. Olá Eduardo,
    Parabéns pelo excelente post e por compartilhar o seu conhecimento conosco.
    Gostaria de saber como eu faço pra obter o acesso a data de nascimento, foto e outras informações do usuário logado através do Google.

    Desde já agradeço!

  21. Estou tentando baixar o arquivo e está dizendo que o arquivo talvez não exista mais, vc poderia verificar? Estou tentando fazer o download 😀 ou subir no github! vlwww!

  22. Pingback: Como utilizar várias classes como User no Identity – Asp.Net Identity | DL-UAT

  23. Ótimo vídeo Eduardo!
    Se possível, você tem a solução para o bug de loop de redirecionamento que acontece no momento (2:42:13) do vídeo? Já tentei resolver, mas ta complicado. rs

    Abs.

    • Conseguiu resolver, amigo?

      Também não consegui resolver aqui.

      Quando o usuário não está logado, o problema não ocorre, o sistema fica parado na tela de login. Mas quando o usuário está logado e tentamos acessar uma action, direto pela url, que ele não está autorizado, então dá o problema do loop de redirecionamento.

      Alguém?

      • Não consegui resolver o problema. Mas implementei uma alteração que ficou melhor do que o padrão.

        Assim como feito no exemplo com as Claims, criei uma classe filtro herdando da classe AuthorizeAttribute, para customizar o controle por Roles (no meu caso não utilizo claims).

        Nessa classe sobrescrevi o método OnAuthorization para redirecionar para uma página específica de acesso negado quando o usuário não tem está vinculado a uma role que permite acesso a alguma action.

  24. Ótimo tutorial. Parabéns !
    Seria interessante um exemplo do identity implementado com o DDD utilizando arquitetura em camadas.
    Valeu Eduardo.

  25. Eduardo,
    Meus Parabéns, suas explicações ajudaram muito, os claims são muito práticos mas é necessário se mudar o raciocínio quando se quiser substituir o role pois ele é muito mais poderoso, basta ter imaginação.
    Eu também vou substituir todos os meus cookies e sessions para o claim.
    Porem eu baixei seu projeto e infelizmente nele faltam uns sete views, você os teria para disponibilizar ?

  26. Olá Eduardo

    Muito legal seus artigos, sempre me ajudam bastante.

    Uma duvida que tenho e não consegui encontrar uma maneira de fazer é compartilhar a autenticação do Identity entre outras aplicações, queria fazer SSO (Single Sign On), mas utilizando o identity meu usuário não fica autenticado na outra aplicação.

    Será que você pode me ajudar?

  27. Como sempre ótimo material Eduardo!
    Pelo que li nos comentários várias pessoas estão com dúvidas/dificuldade em implementar o identity usando padrão DDD.
    Você tem algum tutorial ou links onde expliquem um pouco essa implementação?
    Valeu!

  28. Olá Eduardo, parabéns pelo posto. Muito bacana. Gostaria de uma ajuda com o Identity por favor. Aqui o cadastro de usuário é por Filial, fiz a customização do ApplicationUser colocando o campo FilialID e o campo na tabela AspNetUsers. Tudo funcionando perfeito. Porém agora na hora do login teria que ser verificado username, senha e filial pois tenho, por exemplo, usuário “eduardo” na filial “01” e usuário “eduardo” na filial “02”. A Filial eu pego por parâmetro na QueryString, e a tela de login continua apenas com os campos UserName e Password. Tem como fazer isso? Por onde eu começo? Desde já agradeço a ajuda. Valeu.

  29. Olá Eduardo! Primeiramente obrigado e parabéns pelo post!
    Estou com problema ao tentar logar no facebook. Quando já existe um usuário cadastrado dá certo. Porém se tento cadastrar um novo usuário através do facebook dá erro. Pelo que vi o erro é na seguinte linha da classe AccountController.cs:

    var externalIdentity = HttpContext.GetOwinContext().Authentication.GetExternalIdentityAsync(DefaultAuthenticationTypes.ExternalCookie);
    var email = externalIdentity.Result.Claims.FirstOrDefault(c => c.Type == “urn:facebook:email”).Value;

    Aguardo e muito obrigado!

  30. Eduardo.. tudo bem???

    Fiz a implantação da camada do Identity no meu projeto MVC e me deparei um erro ao executar uma action assíncrona…

    The asynchronous action method ‘Register’ returns a Task, which cannot be executed synchronously.

    Fiz e refiz o projeto porém não obtive sucesso…

    Você ja se deparou esta mensagem de erro???

    Abraços

  31. Boa tarde Eduardo,

    Primeiramente parabéns pelo seu trabalho, ele é muito especial para todos nós que queremos aprender. Eu estou usando o seu sample para estudar sobre o Asp.Net Identity, porém alguma coisa que não consigo entender porque não consigo associar um clam para um usuário. Estou na view SetUserClaim e ele chama UserManager.AddClaimAsync(id, new Claim(claim.Type, claim.Value)); mas não salva no banco.

  32. Eduardo, parabéns cara.
    Me espelho bastante nos seus projetos, e na sua forma de desenvolver. Excelente trabalho, e é muito gratificante para a gente ter acesso a essas informações e dicas que você. Cresci muito meu desenvolvimento acompanhando seus tutoriais e seus projetos.

    Então, na arquitetura DDD, é viável eu colocar um contexto somente para o identity certo? Seria na CrossCuting?

    Então outro ponto, em relação ao defeito de loop de redirecionamento ao confirmar o email e fazer o login? O que sugere?

    Obrigadão.

  33. Olá Eduardo, Eu fiz o treinamento on-line contigo o ano passado (2015), gostei muito de sua maneira clara de explicar temas que muitas vezes não são tão simples. Estou com uma dúvida referente ao envio de e-mails, funcionalidade existente no projeto exemplo que você disponibilizou. Existe alguma restrição de envio de e-mail do localhost, pois eu tinha alguns projetos que funcionavam perfeitamente e agora também não funcionam mais, já tentei configurações do hotmail, gmail, uolmail e nenhum deles o e-mail vai, existe alguma nova restrição que você conheça para envio de e-mails em tempo de projeto via localhost.
    Obrigado

  34. Oi Eduardo, muito bom seus vídeos e tutoriais. Eu estou tentando implementar essa solução do Identity em um projeto .NET 5 e MVC 6, porém quando vou trazer a biblioteca Owin dentro de project.json, o projeto não compila, pois essa biblioteca não tem compatibilidade com o .NET core, você saberia me dizer se existe um tutorial com Identity e Login externo dentro de um projeto .NET 5?

    Obrigado

  35. Olá, boa tarde!!
    Comecei a ver o vídeo, simplesmente o melhor que encontrei até hoje.
    Mas pra isso você pede que baixem o código fonte do exemplo que vc editou.
    Porém o link pra download está indisponível, vc teria ainda o código fonte?

  36. Sensacional o seu tutorial, meus parabéns!!
    Eduado, o link do exemplo não está disponível, existe outro link onde eu possa pegar o projeto?

  37. Boa tarde,
    Seu tutorial é muito bom, parabéns. Só não consegui baixar a sua versão pois o link não existe mais.

    Abraços e Parabens

  38. Eduardo, gostei muito do seu artigo. Tentei baixar o código fonte do artigo mas o link está quebrado. vc poderia repostar?

    []´s Ermindo

  39. Fala Eduardo, beleza?

    Primeiro parabéns pelo post, totalmente esclarecedor!!

    E segundo, eu não consigo fazer o download do código fonte, fala que não tenho permissão ou está disponível!

    Valeu

  40. Primeiramente, o seu curso é muito esclarecedor. Aprendi muita coisa sobre MVC e Injeção de Dependência e agora ASP .Net Identity, mas estou precisando do Demo que você apresentou no seu vídeo.

    Obrigado desde já

  41. Excelente aula… Parabéns

    O link para o código fonte esta quebrado 🙁
    Poderia atualizar??

    Poderia me indicar algum Framework semelhante ao WordPress em .net? Se existir.

  42. Boa noite Eduardo. Gostei de sua apresentação sobre o Identity, o link para baixar os fontes não está funcionando. Ainda está disponível?

  43. Olá Eduardo.

    Cheguei até seu site dando uma “googlada”, e primeiramente parabéns pelo site.

    Bom, estou desenvolvendo uma aplicação C# Asp.Net MVC 4, e tenho que implementar login via Active Directory, porem, essa aplicação terá também usuários de fora do AD, e deverá controlar grupos de permissões a nível de aplicação. Alguma sugestão para melhor maneira de implementar este recurso do AD com esses requisitos?

    Sou Jr. ainda em desenvolvimento e analise de sistema, porem jogaram isso na minha mãe e estou pesquisando uma melhor maneira de faze-lo. Qualquer dica e sugestão serei muito grato.

    Abs e sucesso!!

  44. Boa tarde, Eduardo!

    Muito obrigado pelo tutorial, tudo está funcionando corretamente, porém, existe somente um problema, já foi relatado aqui por outros usuários, mas sem ajuda ou respostas de como solucionar, eu tentei encontrar uma solução e não consegui resolver. O único problema do projeto é que ele não consegue setar/associar a claim para um determinado usuário, a página de associar a claim abre corretamente é feito o post normalmente e redirecionado, porém, não é salvo no banco. O projeto original “sample” que você usou para criar o seu está com essa parte funcionando e aparentemente igual ao seu, porém, no seu não funcionar.
    Por favor, ajude com essa solução.
    Obrigado1

  45. Olá Eduardo,

    Valioso trabalho.

    Estou com uma dificuldade no método ResetPassword, quando vai executar o ResetPasswordAsync, lança uma exceção:

    System.Data.Entity.Core.OptimisticConcurrencyException

    Depurei a execução e está chamando o método com os parâmetros corretos, tem alguma sugestão?

    Grato.

  46. Muito bom o tutorial, bem explicado. Parabens!
    Como poderia pegar o usuário logado ou pegar uma lista de usuario num dropdownList??
    Obrigado!

  47. Ótimos artigos Eduardo. Estou lendo muitos deles.
    Tenho uma dúvida que não encontrei ainda nos docs da Microsoft e tb na web: como utilizar roles e claims nos controladores sendo que eles são criados e persistidos num BD? Ou seja, a ideia é que no sistema cada organização crie sua própria estrutura de perfis e permissões.

  48. Eduardo estou utilizando o modelo desenvolvido em minha aplicação, porém estou com um problema, ao adicionar claims ao usuario as mesmas não estão sendo salvas, ele só tem duas no momento, e não consigo adicionar mais. Vlw abraço!!
    Ótimo tutuorial;

  49. Incluí um campo de CPF na tela de registro do usuário. Agora preciso que a tela de login utilize o CPF e a senha para fazer a validação na base. Os campos originais são e-mail e senha.

    Alguém consegue me ajudar ?

  50. Boa noite Amigo, Tutorial muito bom !. Estou com uma Duvida, pode me ajudar ?

    No seu exemplo se um usuário que não pertença a Role “Admin”, digite a url de RolesAdmin/Index ele fica carregando e retornar a pagina “Esta página não está funcionando”, queria que retornasse para o Login. como fazer isso ?.

  51. Oi Eduardo, tudo bem?
    Tem como eu adicionar várias claims de uma só vez ao usuário?
    Se sim, como é a melhor forma de eu fazer isso?

    Desde já, agradeço.

Deixe uma resposta

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