ASP. NET Core - fundamentos de autenticação e autorização | Trevoir Williams | Skillshare

Velocidade de reprodução


1.0x


  • 0.5x
  • 0.75x
  • 1x (Normal)
  • 1.25x
  • 1.5x
  • 1.75x
  • 2x

ASP. NET Core - fundamentos de autenticação e autorização

teacher avatar Trevoir Williams, Jamaican Software Engineer

Assista a este curso e milhares de outros

Tenha acesso ilimitado a todos os cursos
Oferecidos por líderes do setor e profissionais do mercado
Os temas incluem ilustração, design, fotografia e muito mais

Assista a este curso e milhares de outros

Tenha acesso ilimitado a todos os cursos
Oferecidos por líderes do setor e profissionais do mercado
Os temas incluem ilustração, design, fotografia e muito mais

Aulas neste curso

    • 1.

      Introdução

      2:03

    • 2.

      Configurar o projeto de anunciante classificado

      8:53

    • 3.

      Adicione autenticação de cookies ao projeto Web

      14:33

    • 4.

      Adicione funcionalidade de login e logout

      17:17

    • 5.

      Como explorar reivindicações de identificação e principal

      9:29

    • 6.

      Como explorar reivindicações de identificação e principal

      13:28

    • 7.

      Revisão de seção

      3:05

    • 8.

      O que é o núcleo de identificação

      14:06

    • 9.

      Adicione identificação ao projeto existente

      16:55

    • 10.

      Implemente o registro seguro - parte 1

      9:40

    • 11.

      Implemente o registro seguro - parte 2

      16:35

    • 12.

      Implemente a verificação de email para registro

      9:17

    • 13.

      Considerações adicionais de password

      9:45

    • 14.

      Fundamentos de registro - revisão de seção

      5:10

    • 15.

      Fundamentos de login - Visão geral da seção

      0:31

    • 16.

      Implemente a funcionalidade de login

      17:13

    • 17.

      Lide com o fluxo de logout

      2:33

    • 18.

      Implemente a funcionalidade de reset de password

      8:20

    • 19.

      Implemente o bloqueio de contas

      7:02

    • 20.

      Implemente a autenticação de dois fatores

      9:45

    • 21.

      Revisão de seção

      3:07

    • 22.

      Visão geral da seção

      2:00

    • 23.

      Implemente a autorização básica

      9:07

    • 24.

      Adicione papéis aos usuários

      16:55

    • 25.

      Implemente a autorização baseada em função

      9:28

    • 26.

      Adicione afirmações personalizadas aos usuários

      16:20

    • 27.

      Acesse reivindicações no aplicativo

      7:25

    • 28.

      Implemente autorização baseada em políticas

      9:16

    • 29.

      Revisão de seção - reivindicações e papéis

      2:33

    • 30.

      Visão geral da seção - o que é o OpenIdConnect

      2:13

    • 31.

      Inscreva-se nas credenciais do Google OAuth

      1:50

    • 32.

      Adicione o Google Auth ao aplicativo

      5:24

    • 33.

      Teste o fluxo de login do Google Auth

      4:40

    • 34.

      Revisão de seção do OAuth

      2:58

    • 35.

      Conclusão

      1:43

  • --
  • Nível iniciante
  • Nível intermediário
  • Nível avançado
  • Todos os níveis

Gerado pela comunidade

O nível é determinado pela opinião da maioria dos estudantes que avaliaram este curso. Mostramos a recomendação do professor até que sejam coletadas as respostas de pelo menos 5 estudantes.

129

Estudantes

1

Projetos

Sobre este curso

Visão geral

Neste curso, você vai aprender o básico da autenticação moderna usando a biblioteca de identificação principal do ASP.NET e aprender a estender a funcionalidade em relação às nossas necessidades específicas de negócios. Embora a segurança perfeita seja impossível de alcançar, vamos explorar uma variedade de técnicas que percorrem um caminho distante para garantir segurança e relativa facilidade de uso simultaneamente. Vamos analisar a implementação de segurança em um aplicativo prático do ASP.NET Core e como podemos implementar uma autorização, uma reivindicação e uma política personalizada baseada em autorização.

Por que o ASP.NET Identity Core

Autorização, autenticação e gerenciamento de usuários são características principais em aplicativos do mundo real. Identity Core é a biblioteca principal empacotada com projetos do ASP.NET Core para nos ajudar a obter o máximo de segurança possível da caixa. Fazer a autenticação e a autorização diretamente em seu site pode ajudar a manter seus usuários e seus dados seguros contra ataques. Funcionalidades adicionadas, como Two e Multi Factor Authentication são relativamente fáceis de plugar, e esta biblioteca pode ser facilmente estendida para implementar regras de negócios únicas para cercar como os usuários são tratados.

Crie uma base sólida na segurança principal do ASP.NET:

  • Aprenda como adicionar autenticação de cookie manualmente a um aplicativo ASP.NET Core

  • Como implementar corretamente os papéis, reivindicações e políticas do usuário

  • Aprenda a usar, criar e gerenciar reivindicações de usuário

  • Aprenda a implementar corretamente um processo de autenticação e registro de usuário

  • Aprenda a usar políticas de password e recovery

  • Aprenda a configurar funcionalidades de envio de e-mail para confirmação de conta segura, esqueceu o Password e outros processos

  • Aprenda a adicionar autorização e restrições de usuário

  • Aprenda a adicionar autenticação de dois fatores e vários fatores

  • Aprenda métodos modernos de autenticação (logins sociais, OAuth, etc.)

Mesmo que os fundamentos dos princípios de segurança sejam demonstrados com um aplicativo Razor Pages, todas as técnicas e considerações podem ser tomadas em qualquer tipo de aplicativo ASP.NET Core, incluindo MVC e Blazor. 

Ele tem conteúdo para desenvolvedores em todos os níveis, pois nunca é tarde demais/cedo para começar a pensar nas melhores práticas de segurança para seu aplicativo web.

Conteúdo e visão geral

Para fazer este curso, você vai precisar ter algum conhecimento de . Desenvolvimento NET Core e C#.

Este curso tem pouco mais de 5 horas de conteúdo premium, inteligentemente dividido para destacar um conjunto de atividades relacionadas com base em cada módulo no aplicativo que está sendo criado. Também vamos olhar para a solução de problemas e erros de depuração à medida que avançamos; implementando melhores práticas; escrevendo lógica eficiente e entendendo por que os desenvolvedores fazem as coisas da maneira que fazem. Seu conhecimento crescerá, passo a passo, ao longo do curso e você será desafiado a ser o melhor que puder ser.

Nem sempre fazemos as coisas da maneira perfeita na primeira vez; essa não é a realidade de escrever código. Nós cometemos erros e apontamos para eles e os consertamos em torno deles. Ao fazer isso, desenvolvemos proficiência no uso de ferramentas e técnicas de depuração. No momento em que você terminar o curso, você terá se movimentado no Visual Studio e examinado tanto os erros de lógica e sintaxe, que será uma segunda natureza para você ao trabalhar no . Ambiente NET. Isso vai colocar suas novas habilidades aprendidas em uso prático e impressionar seu chefe e colegas de trabalho.

O Course está completo com arquivos de trabalho hospedados no GitHub, com a inclusão de alguns arquivos para facilitar a replicação do código que está sendo demonstrado. Você será capaz de trabalhar ao lado do autor enquanto trabalha em cada palestra e receberá um certificado de conclusão verificável ao terminar o curso.

Conheça seu professor

Teacher Profile Image

Trevoir Williams

Jamaican Software Engineer

Professor
Level: All Levels

Nota do curso

As expectativas foram atingidas?
    Superou!
  • 0%
  • Sim
  • 0%
  • Um pouco
  • 0%
  • Não
  • 0%

Por que fazer parte da Skillshare?

Faça cursos premiados Skillshare Original

Cada curso possui aulas curtas e projetos práticos

Sua assinatura apoia os professores da Skillshare

Aprenda em qualquer lugar

Faça cursos em qualquer lugar com o aplicativo da Skillshare. Assista no avião, no metrô ou em qualquer lugar que funcione melhor para você, por streaming ou download.

Transcrições

1. Introdução: Olá e bem-vindo ao meu novo curso é para você dotnet Core identidade, autenticação e autorização Essentials. Sou seu instrutor para var Williams. Sou engenheiro de software e palestra há mais de 10 anos. E com este curso, espero ensinar a você todos os fundamentos e fundamentos sobre como proteger seu aplicativo ESP dotnet core usando a biblioteca principal, o núcleo de identidade. Então, nas coisas que você aprende, você aprende a construir uma base sólida no ASP.NET Core Security, você aprende a implementar a autenticação de cookies Manuel é e mantém para gerenciar inscrições de reivindicações em seu aplicativo, você aprende como configurar o trabalho seguro de login e redistribuição para seus usuários, mantendo a facilidade de uso. E configuraremos vários recursos de terceiros, como e-mail, e veremos como implementar a autenticação de dois fatores. Nós analisamos como integrar com logins sociais como Google e Facebook no Twitter, todas essas coisas, tudo neste curso. E todas as coisas que não faremos neste curso são o aprendizado destruído é o desenvolvimento b.net. E não nos perderemos olhando para vários recursos e tentando construir um grande projeto. Em vez disso, vamos nos concentrar em um pequeno projeto e eu envio direcionado o que usaremos a oportunidade para explorar os prós e contras da biblioteca de identidades. Aprendemos a proteger qualquer aplicativo dotnet Core, não importa quão grande ou pequeno seja por causa dos fundamentos de autenticação e autorização que estaremos explorando. Você também precisará de alguma experiência em programação no dotnet Core com C-Sharp bem como a compreensão de como o Entity Framework funciona. Mais uma vez, não vamos explorar todas essas coisas. Tenho outros cursos para essas coisas específicas. Então, neste curso, estamos vendo a identidade do dotnet Core. Então, com tudo o que foi dito e feito, vamos ver como podemos implementar a melhor segurança possível para o nosso aplicativo dotnet Core. Vejo você em breve. 2. Configure o projeto de anúncios classificados: Ei pessoal, bem-vindos de volta. Nesta lição, vamos levar algum tempo para entender os projetos com os quais estamos começando. Eles não vão começar do zero, porque este curso assume que você já tem algum conhecimento básico em é velocidade em um núcleo e Entity Framework Core. E se você não fizer isso, eu recomendo que você confira um dos meus cursos anteriores como completo é a velocidade em um núcleo e Entity Framework Development. Ou meus cursos sobre Entity Framework, se é aí que você precisa aprimorar suas habilidades. Mas para este curso estamos focados na segurança. Portanto, esses tópicos fundamentais já são assumidos e o projeto já está criado. Assim, você pode chegar a esse projeto seguindo o link que já está compartilhado com você. Ou você pode simplesmente ir para o meu perfil do GitHub e procurar um classificador. E faz isso foi segurança de identidade e deve aparecer como um dos projetos se você quiser tomar essa rota. Agora tudo o que você realmente precisa fazer para colocar este projeto em sua máquina, se você não está necessariamente familiarizado com o processo, é apenas apertar o código e então você será capaz de abrir com o Visual Studio. Naquele ponto. Visual Studio permitirá que você clone esta ferramenta qualquer pasta em sua máquina. E então você será capaz de abrir essa solução. Então eu vou apenas demonstrar isso rapidamente. Se eu escolher essa opção aberta com o Visual Studio, então ele diz, onde eu gostaria de cloná-la? E então eu posso apenas selecionar o caminho. Vou deixá-lo como o padrão racional. Em vez disso, vou colocar algo para que ele não entre em conflito com o meu código existente. E então aperte Clone. E uma vez que isso é feito, então você será capaz de clicar duas vezes neste arquivo de solução e abrir a solução em seu computador. Agora, quando essa solução for aberta no Solution Explorer e Marcar você menos para a esquerda, sua pode estar para a direita. No entanto, sua configuração do Visual Studio, realmente não importa que você esteja vendo algo. Podemos deixar isso. Então você verá que temos dois projetos. Temos um projeto de dados, e temos um projeto web. Não, o projeto de dados está mangueira coisas básicas, como a configuração para as entidades, migração até agora para o banco de dados e os contextos de banco de dados reais. Mais uma vez, se algo que acabei de dizer não é familiar para você, pelo menos 80% do que eu disse deve ser familiar para você. Se não for, eu recomendo que você confira um dos cursos anteriores que eu tenho sobre desenvolvimentos centrais ASP.NET. Tudo bem, então para esta parte do projeto, tudo já está conectado com todas as referências e assim por diante. No momento em que você está fazendo este curso, você pode ser solicitado a atualizar alguns pacotes NuGet. Isso é bom. Neste momento, tudo é construído com dotnet cinco, por isso é compatível com versões anteriores e um geralmente compatível com a frente. Mas tudo o que estamos fazendo aqui será compatível até mesmo com a próxima versão do dotnet. Então você não precisa se preocupar muito ser todo o escopo da tecnologia mais recente. Então, em nosso contexto de banco de dados, fazemos referência a duas tabelas e é uma aplicação muito simples. Como eu disse, nós realmente queremos apenas um aplicativo onde nós vamos estar aplicandopreocupações de segurança e configurá-lo e olharpara preocupações de segurança e configurá-lo e olhar como a identidade funciona em geral e nos ajuda a proteger ou site. Então aqui temos duas mesas, uma para as categorias em 14, os anúncios, certo? Estou aplicando as configurações que são chamadas na pasta de configuração, respectivamente para anúncios e quatro categorias. Então, basicamente, estes são apenas semeando alguns dados no banco de dados. Tudo bem, então isso é tudo o que realmente está acontecendo lá. E, em seguida, a migração já está criada. Assim, já criou que a migração inicial onde cria a tabela de categorias e o anúncio ficar com conjuntos de que a relação de chave estrangeira entre os dois. E então ele vai em frente e insere esses dados semeados. Então esse é o nosso projeto de dados. Realmente sei que o projeto web é praticamente onde a interface do usuário vai se sentar como já sabemos. Nesta situação, estou usando páginas Razor. Então, com o núcleo dotnet, você tem a opção de Páginas Navalha de MVC. E você também tem a opção de usar blazer. Conheça os fundamentos do que vamos discutir em termos de adicionar identidade a um projeto e proteger seu projeto. Todos esses fundamentos de segurança podem ser usados em toda a linha com qualquer um desses modelos de projeto. Então, enquanto podemos estar usando páginas Razor, se você tem um aplicativo MVC ou um blazer até o IRR usando, ele ainda pode jogar a maioria, se não todos, dessas preocupações de segurança em conformidade. Tudo bem, então na aplicação web, as coisas de configuração simples estão aqui. Temos a cadeia de conexão que vai gerar um banco de dados, ou ele está apontando para um banco de dados que deve estar no servidor de banco de dados local, que vem com Resolve Studio. Nós temos o banco de dados sendo chamado de classificados dB, e nós demos um pouco de segurança. Você pode fazer alterações lá, se quiser. Então, se você não quer que ele já esteja nesse servidor específico, não quer que ele seja chamado de que não há problema. Vá em frente e ajuste isso. Eu já andaime os anúncios nas páginas e categorias. Tudo bem, então temos as páginas atuais completas aqui. E mais uma vez, esta é uma segurança que o ponto focal deste curso é a segurança. Então eu não vou sair e começar a abstrair e ter repositórios e assim por diante. Temos todos os cursos que vão em profundidade em tudo isso, certo? Então eu estou mantendo o mais simples possível para as coisas que realmente não importam dentro do contexto deste curso. Então você vai ver que eu estou realmente injetando diretamente o contexto. Eu só brigei com tudo aqui do zero. Eu não estou usando nenhuma obstrução ou qualquer injeção de dependência avançada ou algo assim. Só quero algo que funcione. Tudo bem. Então, resumindo, eu estou fora do código de caixa aqui, exceto algumas modificações. Como para os anúncios, o código padrão teria ID, um ID aqui para a lista suspensa, eu tenho ID e nome, que um nome seja exibido em colunistas de drogas, certo? Da mesma forma nos detalhes, teríamos tido ID de ponto de categoria aqui. Mudei isso para precisar para fins de exibição. E semelhante ao criar para a edição. Mais uma vez, temos ID e nome para a lista suspensa. Agora, além de tudo isso, eu já configurou a página de layout para ter os links de navegação adicionais para o anúncio e as páginas de categorias. Então, mais uma vez, tudo isso está feito por você. Então nós temos uma boa plataforma de lançamento porque eu já estou assumindo que você sabe como construir um aplicativo ASP.NET Core, ou estamos focando em segurança. Então, para obter isso totalmente instalado ou se contentar com a mediocridade do código-fonte. O próximo passo aqui seria apenas deixá-lo criar esse banco de dados. Então, se você alterar ou não a cadeia de conexão, você precisa ir para o Console do Gerenciador de Pacotes, que se não estiver nesta seção na sua tela, você sempre pode ir para Ferramentas Gerenciador de pacotes NuGet e obter esse monitor console. E então tudo que você precisa fazer é atualizar o banco de dados. Depois de fazer isso, ele irá gerar esse banco de dados para você com os dados padrão. E então você pode sempre, você sabe, se você clicar, pressionar F5, clicar em Executar ou usar o Controle F5 para entrar no modo não demoed, você terá a web, o aplicativo web, desculpe, iniciar. Certo, mais uma vez, não fiz nada especial demais com o projeto, exceto ter arranhado as novas páginas. Portanto, aqui se você acessar anúncios, você verá os dados pré-implantados padrão em suas categorias. Você verá a mesma coisa, certo? Eu adicionei um pouco de formatação para a página de detalhes para o preço, mas ele não se lembrou de fazer isso aqui para a página de índice. Quero dizer, se você quiser, você pode personalizá-lo como quiser. Mas para nó que é o que eu tenho tão poucos J e apenas poderia ser que você, você modificar a formatação aqui, e você também mudar a categoria, exibi-lo para não ser o nome ID como o que temos nos detalhes, certo? O que, por esta altura, deve ser fácil de consertar, certo? Então, quando voltarmos, vamos olhar para o primeiro conjunto de configurações que precisamos adicionar para obter identidade adicionada ou autenticação em vez disso adicionado ao nosso projeto. Então, vamos configurar a autenticação de cookies quando voltarmos. 3. Adicione autenticação de cookies ao projeto da web: Muito bem, bem-vindos de volta, rapazes. Então, nesta lição, vamos adicionar autenticação de cookies ao nosso aplicativo. Da última vez, um passo em falso da Candida. E eu disse, vamos adicionar identidade. E então eu me corrigi para dizer biscoitos. Portanto, a identidade é a biblioteca que a Microsoft usa para manipular a autorização de autenticação em todas essas coisas de segurança. Mas eles nos permitem fazer nossas próprias coisas. Então, antes de eu entrar nas bibliotecas fornecidas pela Microsoft, eu quero que você aprecie quais são as opções porque você só pode ser necessário funil onde você não quer confiar na biblioteca da Microsoft. Você pode querer fazer suas próprias coisas e autenticação de cookies está disponível, ou você realmente tem a capacidade de adicionar seu próprio tipo de autenticação com seu próprio tipo de autenticação em esquema independente de identidade, uma biblioteca ou não, no caso de você não é tão claro sobre o que é um cookie, tenho certeza que você já viu algo sobre um cookie e todos os seus atravessando a Internet que você vê principalmente em idade antiga, você quer aceitar todos os cookies e todos os tipos de cookie políticas e assim por diante em toda a Internet. Então, essencialmente, um cookie é basicamente um arquivo de dados que é excedido entre o seu computador e um servidor. E ele identifica exclusivamente você como um usuário e seu computador como um cliente. E sempre que você tentar fazer algo em nosso site, essas informações sobre cookies sobre você e seu computador serão compartilhadas com o servidor. E, em seguida, o servidor pode tomar uma decisão sobre se deve ou não comer deve mostrar-lhe algo. Sim, existem preocupações de segurança com o uso da autenticação de cookies em geral. Mas então, quero dizer, você pode fazer o máximo que puder para ajudar a proteger sua aplicação. E tudo. O ponto é que você sempre terá que encontrar um equilíbrio entre usabilidade e segurança. Como quanto mais segurança for colocada, menor será a usabilidade para alguns usuários. E às vezes um usuário mais, o usuário para uma elite é, é menos seguro. Então é um equilíbrio saudável que você definitivamente tem que medir o suficiente disso. Vamos entrar em como poderíamos adicionar autenticação e, por extensão, autenticação de cookies para o nosso aplicativo web como ele está. Então, dentro do nosso arquivo CSS startup.js, vou adicionar essa opção. Logo abaixo do ponto de serviços, adicione páginas Razor. Eu queria ver Serviços pensou Autenticação AD. Então eu posso apenas dizer adicionar autenticação. E isso significaria que eu quero que os usuários tenham que se identificar. Portanto, há pouca olhada na autenticação versus autorização. Autenticação significa identificar-se para que eu saiba quem você é agora nós vimos que um alelo específico iria querer autenticação de cookies. Então, dentro deste método, há algumas sobrecargas. Então, uma versão Overlord R1 tem parâmetros NT. Outro me permite inserir o esquema padrão. E não são baixos, me permite colocar em opções. Então eu vou usar aquele onde eu posso apenas colocar no esquema padrão. Então o esquema padrão para cookies seria basicamente os cookies de string, tudo bem, com ferramentas. Mas então, você sabe, às vezes você não quer digitar em uma corda mágica de aquarela, então eles realmente nos dão constante ou uma constante estática, eu pego algo como biscoito fora e ela viu a culpa. E se eu apenas controlar pontos você vê com a declaração de uso para isso. Então, os padrões de autenticação de cookies ponto e, em seguida, eu esquema de autenticação infinitamente. E isso trará de volta os biscoitos de corda. Tudo bem? Então eu posso usar isso para a compilação segura em todos os momentos, bem como me livrar dessa corda mágica. Além disso, eu gostaria de adicionar, literalmente adicionar cookies. Então, se você olhar para o que este método está fazendo, ele vê-lo adiciona autenticação de cookie para um construtor ASP.NET Core Authentication usando o esquema de tema especificado, desculpe, certo, Então a autenticação de cookie usa problema para ser assistido no cliente para executar a autenticação. Então isso é muita informação aqui. Esse é um tutorial completo bem ali no trecho IntelliSense. Então eu posso adicionar biscoito. E entre essas duas linhas, sabemos, sabemos, sabemos que nosso aplicativo é capaz de autenticação de cookies. Agora, o que precisamos fazer é deixar o middleware saber que ele precisa carregar as bibliotecas e os recursos para ter nossa autenticação e outras coisas feitas. Então, se deslocarmos um pouco para a configuração, que é onde todos os middlewares são realmente adicionados. Verá que já temos autorizações. Autorização, autorização de uso vem padrão com basicamente qualquer modelo de aplicativo dotnet Core. Mas o que queremos fazer é adicionar autenticação logo acima dela, certo? Então você pode apenas dizer. Dot adicionar autenticação ou desculpe, usar autenticação e minha bunda. Use a autenticação logo acima da autorização dos EUA. E eu vou entre essas duas linhas, nossa aplicação, vamos ver, bem, se algo está protegido, então eu preciso ver nosso cookie. Se eu não vir um cookie, use quaisquer logins. Então é isso que autenticação no SES, identifique quem você é. A autorização diz: “Pode fazer isto ou não? Então, depois de identificar quem está usando, o impostor ou o que quer que seja, você identificou quem você é, certo? Você pode realmente executar esta ação ou não? Então é isso que a autorização vê. Então, para invocar autorização e o que vou fazer para acelerar isto está no nosso índice de anúncios, certo? Ou não ou limitado nas categorias. Isso faz com que seja um pouco mais sentido que você queira prever a lista de categorias e a capacidade de aumentar a lista de categorias, então seria prever anúncios. Claro, diferentes regras de negócios têm requisitos diferentes. Então não estou dizendo que é assim que deve ser baseado em seus contextos, você toma sua decisão, certo? Mas se quiséssemos restringir o acesso à lista de categorias, tudo bem, então se você executar esse aplicativo agora você pode pausar executar o aplicativo. Você verá que não há nenhuma restrição entre a categoria de discurso e discurso publicitário. Isso é bom. No entanto, tudo o que temos a fazer é abrir colchetes logo acima da classe. Tudo bem, então eu tenho namespace e nós temos aula pública. E então podemos dizer autor que eu escrevo, e nós apenas incluir ou faltando usando declarações. Tudo bem, e então só esta linha, basicamente, vamos restringir o acesso a qualquer outra coisa nesta página. Se é um aplicativo MVC, provavelmente seria sobre o controlador ou seria sobre as ações. Então você pode realmente colocar isso autorizado no contexto de um aplicativo MVC sobre o controlador para restringir o acesso a cada ação nesse controlador, ou sobre as opções específicas para restringir o acesso a essa ação específica. No caso de matrizes de pH como o que temos, você poderia colocá-lo sobre toda a classe que representa o pH. E isso, por sua vez, vai escorrer para todos os manipuladores que podem estar no pH. Claro, ao contrário de MVC onde você tem um arquivo com estoque de leilão múltiplo em várias visualizações em páginas Razor, você tem várias páginas, cada um tipo de autônomo. Então, se você quiser restringir o acesso à funcionalidade em uma página específica, basta colocar essa inundação autorizada sobre essa página específica. Tudo bem. Então, com tudo isso dito, vamos dar uma olhada no que adicionar essas poucas linhas de código traria à nossa aplicação. Muito bem, então a nossa candidatura está aberta. Se eu for para anúncios, eu vou navegar lá sem nenhum problema. E então se eu escolher categorias, então você vê que ele está me dando isso enquanto ele está me dando 40 antebraço não pode ser telefone, certo? A razão para isso é que ele está tentando encontrar por padrão uma página de login. Veja que eu não sabia disso. Eu não fiz muito. Certo. É automaticamente vendo bem, eu vejo na bandeira autorizada aqui para esta praia, viu isso significa que eu preciso pedir a pessoa para se identificar antes. Tudo bem, então se você fez alguma segurança formal com o B.net Core, você sabe que é esse símbolo. Adicione o material autorizado e o login. Você já aumentou o risco de páginas de entidade ED dobradas antes. Mas como eu disse, estamos construindo caixas. Quero que façamos companhia. Eles apreciam todos os pedaços e como eles se encaixam no quadro maior. Agora, mais uma coisa antes de encerrarmos esta sessão. Às vezes você gostaria desse tipo de autorização em todas as páginas. Então, se você está no aplicativo MVC ou é um páginas para cima, às vezes é que você só quer sempre ser é que uma pessoa continua. Nosso usuário IDE iria continuar. Eles têm que se identificar que tem que ser um usuário conectado para acessar qualquer coisa. Então, nessa situação, se você estiver usando páginas Razor, você pode ir para a inicialização, ir para a linha que diz adicionar páginas Razor. E então você poderia dizer adicionar opções MVC são desiguais, certo? E, em seguida, dentro de que você apenas tem uma expressão lambda onde você pode ver filtros q-dot, dot add. Então filtre no caso de você estar se perguntando, filtro apresenta isso, este é um filtro. Qualquer coisa que esteja entre colchetes que passe por cima de um controlador ou leilão ou, neste caso, uma página. E, às vezes, até código de componente. São chamados filtros, certo? Então aqui estou vendo adicionar um filtro. E este filtro seria uma nova autorização. O único autor como filtro. Certo, e então Controle pontos para incluir a referência que faltava. Então é assim que você veria tudo no meu e eu estou perdendo a abertura e fechamento lá. Tudo bem, então esta é a minha maneira de ver cada página que diz que há uma página nesta aplicação. A maioria tem esse autor como filtro por padrão. Então isso significa que eu poderia até remover essa autorização. Eu não preciso dele lá explicitamente porque não, eu bloqueei todo o meu aplicativo. Se você estiver usando MVC, isso pode ser feito de forma semelhante. Em vez de artérias de páginas, você provavelmente teria controladores são deixe-me ver. Controlador. Então você teria controladores que exibições, controladores com exibições. E então você não teria que dizer adicionar opções MVC. Você realmente só veria colocar em que a expressão lambda diretamente dentro, certo? E lá vai você. Então é assim que você adicionaria esses filtros por padrão a todos os seus controladores. Controladores com você, certo? Então é assim que você possuiria toda a sua aplicação. Agora, à luz de eu bloquear todo o aplicativo, pode haver páginas que eu queira acessar sem precisar de cabeças de autor, certo? Então vamos ver, por exemplo, a lista de anúncios deve ser livre para visualização. Talvez a página de detalhes deva ser livre para visualização. edição e a criação são restritas e a exclusão seria restrita para autenticar o direito dessa pessoa. Então, nesse caso, eu poderia facilmente ir para o índice e então usar outro filtro que diz permitir anônimo e não derramar Nemo, certo? Vá em frente e inclua os ausentes ou referências. Vá. Então permitir anônimo nessa página e permitir anônimo na página de detalhes, certo, apenas por causa do argumento. Então, se eu voltar a executar sem depuração, bem, então você verá que eu estou indo para a página de login. Por quê? Porque eu não acabar e eu não permitir anônimo na página de índice real do site. Tudo bem. Então, você está indo para a privacidade e índice por padrão. Então, em qualquer lugar que você queira chegar sem precisar autenticar, você tem que dizer para permitir anônimo. Então, apenas para fins de demonstração, vamos permitir anônimo. E eu só vou reconstruir e tentar novo e ver que nenhum lugar entra na página de índice, certo? Se eu for para privacidade, eu carrego anônimo. Se eu for para categorias, não permitirei anônimo. I após o login. Se eu tentasse ir a anúncios, então lá vamos nós. Ei, ele funciona direito sobre criar, editar, excluir, tudo isso requer logins, certo? No entanto, os detalhes funcionarão porque eu carrego anônimo. Então essa é uma maneira básica de sair da caixa. Eles são mais baixos. Sendo a Microsoft, todo o framework dotnet e dotnet core development suite nos permite escolher, escolher e escolher. É muito fácil, na minha opinião, qual página deve ser protegida, em qual página não deve ser segura. E, claro, fica muito mais complicado com mais regras de negócios. Mas tenho certeza que você está começando a ver se você não está realmente familiarizado com o que fizemos até agora, Como é fácil de fazer realmente começar a adicionar restrições de segurança ao nosso aplicativo. Agora, quando voltarmos, vamos conectar um fluxo de trabalho de logout muito simples. Basta mostrar o que parece quando chegamos ao login da página, nós fornecemos o que precisamos fornecer e o que parece quando estamos logados. 4. Adicione funcionalidade de login e logout: Muito bem, pessoal, bem-vindos de volta. A última vez que tivemos certeza de que estávamos configurando nossa autenticação de cookies e olhamos para todas as coisas que precisamos colocar em prática para garantir que nosso aplicativo solicitará que um usuário identifique ele mesmo antes de permitir que eles acesso. E vimos como isso é fácil. Oh, não. A linha que destaquei é ligeiramente modificada do que tivemos da última vez e vou explicar. Então, quando adicionamos o cookie off e adicionamos a autenticação global em nossa autorização Filtro Outro, percebemos que ele sempre seria padrão para uma página que dizia que o site barra barra login com string de consulta, que é chamado de URL de retorno, certo? E daí se você não quisesse que ele fosse para esse caminho, certo? Então isso é completamente opcional, mas por padrão vai cortar nossa barra de dois-pontos login está procurando uma página de login nesse caminho. Se você estiver usando MVC, você criaria um controlador de dois-pontos e tem uma opção chamada login. Então não iria tudo para aquele controlador chamado cones. E há uma ação de login retornada. A visualização em páginas Razor seria tão simples como criar uma nova pasta, chamar um cones TOC e criar nosso pH lá chamado login. Certo? Agora, e se você não quiser os padrões? Então foi isso que eu fiz aqui. Se você não quiser o padrão para o passe de login, você pode realmente adicionar cookie e, em seguida, basta colocar uma expressão lambda e definir o caminho de login para ser qualquer caminho que você deseja que ele seja. Então, em nosso exemplo, eu vou estar usando esta paleta personalizada. Tudo bem, mais uma vez, com todo o caminho personalizado, ele estará procurando por um login de barra cone. Portanto, cabe inteiramente a você se você quiser usar o caminho personalizado apenas para fins de prática ou se quiser manter o padrão. Realmente não importa, desde que você aprecie o conceito. Então, com o caminho personalizado, vou criar uma nova pasta cancelada. Pode ser facilmente autenticação ou o que quer que você queira chamá-lo imediatamente. E dentro de tudo, vou criar uma nova página do Navalha. Vou usar uma página de resultados vazia. E eu fui chamá-lo de login porque ele está olhando na pasta de autenticação para o nosso pH chamado login. Então, uma vez que eu faço isso, eu recebo meu HTML ou CSS, alguns de nossos outros e meu código atrás. E nós vamos estar montando isso bem rápido, já que eu meio que tenho o formulário aqui. Então, vou colá-lo ali e depois explicarei o que está sendo feito, certo? Então eu tenho rolo, certo, então eu tenho uma primeira div, digamos, pode abrir e fechar essa div. E então você abre e fecha outra div. E então quero dizer que a seção é opcional. É a sua interface de usuário, você pode colocar no que quiser. Mas isso é um tipo de modelado fora da página de login padrão a partir de identidades. Então, se você já tem um projeto ou uma página de identidade, tudo bem. Você sempre pode ir buscá-lo. No momento em que você está fazendo esta lição, esta página já estaria no projeto de qualquer maneira. Então nós podemos realmente ir e apenas buscar o código e colocar dentro se você não quiser digitar ponto do zero. Mas basicamente em poucas palavras, eu só tenho um formulário aqui que está tomando um e-mail de entrada ponto, senha de ponto de entrada e, em seguida, uma caixa de seleção para lembrar de mim. Tudo bem, isso é tudo o que realmente tem. E, em seguida, para completar tudo, temos um botão de enviar que diz login. Tudo bem, abaixo, incluí o PowerShell para os scripts de validação que são opcionais nestes, neste momento. O que? Podemos colocar todas essas coisas para que você possa ir em frente e replicar esse formulário ou que você quer pausar e replicá-lo, ou você quer ir buscá-lo do projeto, tudo bem. O que eu vou seguir em frente neste momento. E vamos codificar o código por trás. Não, não estamos fazendo nada muito chique. Joseon, mais uma vez, estamos tentando levar certos conceitos para casa. A primeira coisa que eu encorajaria você a fazer é permitir anônimo. Porque se não permitirmos anônimo, ele se tornará uma chamada de circuito, ou seja, quando as configurações de cookie estão tentando chamar o caminho de login conforme definido na inicialização. Ele vai acertar esta página. E, em seguida, se ele não pode sozinho no MOZ iria manter na tendência para a página com um URL de retorno para a página e, em seguida, ele iria apenas, eu apenas quebrar para que você pode realmente tentar e ver que tipo de erro você iria obter. Tão evasivo capaz de ver esse erro no futuro, sabe, certo? E provavelmente mais tarde podemos experimentar e ver como eles são, mas apenas colocar em um baixo anônimo suspeito dessa dor de cabeça. Agora, em vez desta página, vou criar um modelo rápido. E este modelo. Vai ser chamado de entrada. Então, mais uma vez, este é um tipo de modelo do código existente são alguns Kodak seria gerado para você por uma entidade, mas quando chegarmos lá, você vai vê-lo. Mas agora tudo o que tenho é comprar propriedade para o modelo de entrada. Temos um URL de retorno padrão apropriado e Tim vetou mensagem de erro para. Nós provavelmente nem precisamos disso, mas hey, e então nós temos uma classe chamada Input Model, que leva esses três campos. Tudo bem, então pausar, replicar, e seguir em frente. Tudo bem, então para o nosso “get “, eu só vou reajustá-lo muito rapidamente com transformá-lo em uma tarefa pública, assíncrona na pia de Getty, isso leva o retorno que você é como um parâmetro sobre padrões para nulo. E então, na verdade, eu posso fazer um componente de atribuição óssea aqui nós vamos apenas dizer para virar sua cabeça é nulo, então fazê-lo ser igual a isso. Então, isso é basicamente o que você vê. E então definimos o retorno, você é uma propriedade para ser o URL de retorno. Agora, nessa nota, acabei de perceber que não tenho o oculto para o URL de retorno no formulário. Então o que eu vou fazer é um campo escondido adequado em algum lugar. Eu vou apenas colocá-lo bem aqui. E isso vai ser para o retorno, retorno euro, e seu tipo vai ser escondido. Então, o ponto do retorno sua lista que você sabe quando você está, quando você está tentando acessar além para dar uma página e é um login e você login geralmente navega para o pH disso. Teria ido para o caso se já tivesse sido autenticado. Isso é o que o retorno deles você já representa, certo? Então, o que você clicar em Concluído. E então ele disse: “Ei, por favor, faça o login primeiro. Está armazenando aquela panelinha original, o destino original. Certo, então é isso que você está fazendo, é por isso que estamos vendo quando você chegar aqui, qual é a página que estava tentando ser acessada? Estes mantêm o controle dele. Agora, a próxima coisa que faríamos é onde processamos a criação e validação do usuário real. Tudo bem, então aqui o que estamos vendo é que temos um método assíncrono na política. Tudo bem? E, em seguida, dentro deste no método post AC, eu vou sentar lá retornar URL novamente. Então o mesmo tipo de componentes M e pode trabalhar aqui novamente. Tudo bem, se não for, se for nulo, então o padrão é a página inicial. Sem problema. Tudo bem. E provavelmente um pouco mais de refatoração pode acontecer, mas tudo bem. Podemos deixar isso sozinho para null, null em um cenário real, o que você gostaria de fazer neste momento, então pausa faz quando eles enviam nome de usuário, senha. E se você quiser, eles querem ser lembrados. Neste ponto, você realmente iria para o banco de dados e ver se este usuário existe? Sim. Está bem. Essas ações, se não balde de flutuação e diga por favor, desculpe, mas ele é validador quem você é. Isso é bom. Mas certo. Não é pior do que em taxas de demonstração. Então o que eu queria fazer é apenas código rígido. Isto não é uma boa prática. Geralmente não é uma boa prática. Mas, mais uma vez, isso é propósitos de demonstração. Go só queria ver como é que se engana. Então eu estou indo apenas para código rígido e endereço de e-mail de inundações. Consulte Admin, test.com. Diga se a pessoa entra admin em test.com com uma senha de p no sinal palavra um, certo? Então essa é a minha forte e especial postura forte que eu costumo usar. Mas isso é exatamente o que estou colocando aqui mais uma vez, para fins de demonstração, há algumas coisas erradas aqui. Ganhou sua senha nunca deve estar em texto simples. Eu uso este ônibus ou ele nunca deve estar em texto simples. Então eu estou apenas colocando isso lá fora para fins de demonstração. Mais tarde você olhar para como você pode hash a senha nas senhas vai realmente olhar como quando armazenado para um, então um arquivo de texto simples. Agora, quando encontramos esses usuários, então vamos ver, este é o usuário que estamos procurando. Isso é o que foi inserido. Então o que precisamos fazer é construir uma lista de reivindicações. Não, eu vou dizer que é praticamente ponto de dados sobre o usuário, certo? Literalmente, a palavra diz um creme. É por isso que Klimt deve ser. Então estes são pedaços de informação que o usuário tem. O mar, os mares, quem eu sou, esta é a minha reivindicação à fama. Este é quem eu digo ser quem você quiser congelá-lo. Isso é basicamente o que eu limpo representa uma construção de nossa lista de reivindicações aqui. Estou vendo Barclay e z igual a uma nova lista de reivindicações. E então aqui vou eu fazer algumas reivindicações. Então nucleon onde adicionar à lista um núcleo. E nós temos algumas constantes aqui que tipo de reduzir nossas necessidades são ID e cordas mágicas. Então, há certas reivindicações de que o sistema sempre reconhecerá e automaticamente procurará e eles são meio armazenados, são dados a nós através deste sistema de biblioteca de pontos segurança, tipos clean.com, certo? Então você provavelmente teria que incluir essa instrução usando quando você colocar nessa linha de código. Tudo bem, então tipos de reivindicação identificador de nome de ponto. Então, se você olhar para a string estática, isso é o que parece. Agora imagine ter que digitar essa string toda vez que você queria nomear identificador, sabe. Então, assim como com o cookie desligado, eles nos deram isso com constantes que são um fã de globalmente aceitável, ou eles trabalham com JWT antes de nossos JSON Web Tokens antes. Ou, você sabe, qualquer tipo de API, você sempre veria reivindicações tipo de como ser um tema comum quando se trata de segurança. E então esta string formatada aqui, que você vê é um padrão XML aberto, é aceitável por muitos sistemas diferentes. Você precisará to.net Core, mas dotnet Core é aproveitado do fato que fornecemos coisas que qualquer pessoa pode usar, certo? Então, facilitamos as coisas, qualquer um que seja mais magro. Então, seguindo em frente, reivindicado test.html em fogo. Que valor você quer ser armazenado como esse, certo? Você já reclamou os tipos de nome, ok? Você colocaria seu nome de usuário aqui. Então eu sou difícil codificar algumas coisas que eles podem ter uma idéia do que iria acontecer. Somos novos, limpos, regras de tipos limpos. Que papel é essa pessoa? É um administrador, é o comprador das destilarias do usuário, etc., novo, limpo. E então você pode adicionar mais reivindicações como ele quer de pontos de dados aleatórios, valor aleatório. Você pode adicionar quantas reivindicações forem necessárias para operar no sistema. Você pode adicioná-los, certo? Caso contrário, eles vão, tipo de será adicionado por padrão. O que estou mostrando mais uma vez todas as porcas e parafusos que combinam para fazer o que chamamos de princípio de reivindicações. Então, depois de termos a lista de reivindicações, então queremos criar um usuário de identidade. Então você diz usuários de identidade var igual a uma nova identidade de reivindicações, que leva essa lista de afirmações que acabou de ser criada, certo? E então dizemos que estamos usando os padrões de autenticação de cookie, esse esquema de autenticação, certo? Então aqui estamos vendo, por favor adicione esta lista de afirmações chave a este esquema específico, que é cookies. Não, você não pode ter múltiplas identidades. São vários esquemas que estão usando a mesma identidade, certo? Ou um princípio. Então aqui vemos o princípio VAR é realmente apenas tomado o usuário identidade, certo? Assim, você pode ter vários principais, vários usuários de identidades com vários esquemas. Mais tarde veremos como resolvemos o login usando bibliotecas de terceiros. Nossos sistemas, veremos que podemos adicionar outras reivindicações, estão criando outras identidades usando as reivindicações desses, certo? Assim, o princípio do usuário identidade longe é igual ao novo principal. E, em seguida, a última coisa que precisamos fazer é realmente registrar este usuário e enviar tudo o que precisamos para dizer ao aplicativo que esta pessoa está assinada para que ele precisa assiná-los no aplicativo. Então vamos chamar o contexto HTTP. Ótima. E isso basicamente representa a linha plana, a linha de base para onde cada solicitação e resposta passa. Então, se dissermos aos contextos para entrar usando autenticação de cookie, direito, o principal, então criar Nosso, deixar este aplicativo saber que este princípio com essas afirmações, que o usuário é basicamente um usuário conectado. Nós os identificamos? E você pode se sentar se for persistente ou não. Então, e-sport assistente seria como quando você diz Lembre-se de mim em qualquer resfriamento seu computador e ligá-lo novamente e você ainda está conectado. Isso é praticamente tudo o que eles estão fazendo lá eles estão vendo, sim, lembre-se este cookie para a próxima vez para que o usuário marcou para não são sem falso TO cookie de ponto persistente é para sua autenticação. Depois de tudo isso, vamos retornar o redirecionamento local com esse URL de retorno. Então, estamos usando redirecionamento local como um desses recursos de segurança e tudo porque há momentos em que as pessoas podem seqüestrar, Eu uso uma sessão em tentou dar-lhes sua própria versão do site que eles queriam que eles legal ferramenta ou outra coisa. Então loci redirecionar para ter certeza de que ele só vai ler diretamente para algo que é interno. Porque lembre-se que a string de consulta URL de retorno, que é propensa a mudar. Então, se alguém colocar no Google.com, ele realmente iria navegar para google.com depois que eu autenticar. Pense no que nosso Tucker poderia fazer com isso. Logo, o redirecionamento é uma maneira muito simples e eficaz de tentar mitigar contra esse ataque de redirecionamento. Agora, partindo desta declaração se, eu só vou dizer outra coisa, retorno autorizado ou não autorizado aqui, se você for abusado dos desenvolvimentos API que lhe dará 40 em resposta que o in-order, você não está autorizado a realizar testes ou leilões. Portanto, aqui, se você tentar fazer login e ele falhar, só precisamos saber que você não está autorizado. Este é um exemplo de ossos nuos muito simples mais uma vez, Tudo bem, então vamos dar uma volta rápida. Tudo bem, então nós temos nosso aplicativo, eu cliquei em categorias e ele me navegou aqui. Então nosso teste é admin test.com e nossa senha é P, Isso é um SSD ou RDD1, certo? Só para ter certeza, então clicamos em Login e, em seguida, somos redirecionados para a página de categorias, certo? Então essa foi a URL de retorno, Clique para categorias, logado e apenas navegou para categorias. Tudo bem, então, se você não está fora da string de consulta, você não vê em que ele tinha esse tipo de URL de retorno de ponto de interrogação igual a, e em alguns URLs , alguns leva lá que foi retornado. Sabe, está me perguntando se eu queria ver se está tudo bem. Mas você percebe que não há realmente nenhuma indicação de que fomos registrados em vermelho. Então é aí que entra o acesso às informações do usuário. E o que queremos fazer na próxima lição é entender como podemos acessar esse princípio de reivindicações, bem como facilitar a funcionalidade de logout. 5. Explorando reclamações e direccionadas de identidade: Ei pessoal, bem-vindos de volta. Então, da última vez que estivemos aqui, estávamos sentando nossa funcionalidade de login, que começamos a trabalhar tanto quanto pudemos ver porque fomos capazes de passar a autenticação na tela e realmente nos ver navegar para onde precisamos para ir. Portanto, a prova real em qualquer aplicativo embora alguém esteja logado é quando você exibe para eles, Olá e nome de usuário ou algum lá, há sempre alguma sugestão visual para acompanhar uma autenticação bem-sucedida ou uma sessão autenticada enquanto a pessoa estiver no aplicativo. Então nós queremos saber é configurar nosso aplicativo para exibir o usuário conectado, seu nome de usuário na verdade, e provavelmente mudar o que é exibido no menu em relação ao fato de que eles não são autenticados. Nós também vamos nesta atividade dar uma olhada em como as reivindicações nos ajudam a fazer tudo isso. Então o que eu gostaria que você fizesse seria para um, vá em frente e crie uma nova hora parcial. Vamos chamar de login parcial. Então você pode simplesmente chamar diretamente unshared, clicar em Adicionar e, em seguida, criar a nova página Navalha ou realmente apenas criar um novo item. E então você pode acertar a visão navalha. Então, se você criar uma receita e você vai obter o pH e o código por trás. Não precisamos dos dois. Só queremos o arquivo em si. Então você pode aqueles vista de navalha de calor, chamá-lo de sublinhar login parcial. Tudo bem, eu já tenho um, então eu só vou te mostrar que eu só estou te mostrando o que fazer e, em seguida, clique em adicionar e então você vai obter o novo arquivo por si só, certo? Então, quando você receber esse arquivo, nós vamos configurar o “não”. Para que ele possa atuar como a sugestão que vamos usar a tela, o login usa informações. Então, quando você tem esse arquivo, você pode ir em frente e começar retro ajustá-lo assim. Um cria uma nova lista não ordenada, dar-lhe a classe navbar nav. A razão para isso é que nós queríamos caber na barra de navegação e alelos, que eu vou mostrar-lhe em alguns segundos. Então a coisa é que se você já andaime um MVC ou um projeto dotnet Core em geral, com a identidade incluída. Bom, eu realmente tirei este tipo de fora da caixa, mas desde que estamos fazendo isso do zero para que possamos ver as porcas e parafusos e como tudo está conectado. Estou só a mostrar-te como configurar este ficheiro rapidamente. Então vamos ter o login parcial, dar-lhe que lista desordenada com barra de navegação classe. E então vamos ter uma declaração “se”. Então, estamos vendo se a identidade do ponto do usuário é autenticada. Então o usuário aqui representa o princípio de reivindicações que não existe nos contextos HTTP são realmente sempre existe. Mas até que nós tipo de chamar a função que diz entrar, ele não é autenticado e não teria quaisquer reivindicações. É por isso que, quando entramos, vemos o login usando este esquema de autenticação. Então isso significa que você não está autenticado. Você tem o seu principal e o principal tem identidade e identidade como reivindicação. Então é assim que tudo se junta não, para ser colocado no objeto de usuário contextos HTTP, certo? Então, mesmo que eu possa ver o usuário por si só aqui, na realidade, usuário é apenas como um objeto global que eu posso chamar aqui, mas é realmente uma parte dos contextos HTTP porque eu não posso vê-lo que o usuário ponto, os mesmos objetos realmente, certo? Então, só mostrando como tudo está conectado. Então user.name, identidade, ponto é autenticado, vai dizer sim ou não. Se ele for autenticado, então queremos nosso item de navegação aqui. E eu estou apenas colocando dentro do link do botão de navegação. Então tudo parece uniforme, mas não vai a lugar nenhum. E nós damos a ele o valor de nome de ponto de identidade de dados do usuário san. Então o nome aqui representa uma reivindicação. E lembre-se que não estamos sentados das reivindicações que dissemos para nomear aqueles que são deliberadamente deu-lhes dois valores diferentes para que possamos ver qual deles está realmente sendo usado e vemos um nome de entidade. Então veremos isso em poucos. Então temos nome de ponto de identidade, e então temos este botão de logotipo, que vai navegar para uma página que estamos prestes a criar também na pasta auth chamada logotipos. E seu único propósito é registrar os sais da pessoa. Então, se eles são autenticados, eles devem ver seu nome de usuário e logotipo nascido. E se você quiser, você provavelmente pode qualificar isso e dizer olá, dot nome de usuário ou bem-vindo. Você sabe, algo amigável se eles não são autenticados em que teria sido na seção de outro, então nós queremos exibir a capacidade de registro. Eu não tenho são apenas a página, pelo menos não ainda. Mas a capacidade de se registrar, bem como a capacidade de fazer login. E como eu estou aqui, eu vejo que eu preciso tipo de modificar este é caminho da página B e deixá-lo barulho fora barra login. Certo, antes de fazermos tudo isso ou antes de entrarmos no que acontece com o logotipo, quero que vejamos Watts. Isto vai ceder. Então, no momento, não estou logado. Se você estiver logado, provavelmente verá algo mais exibido, mas tudo bem. Vou em frente e fazer login. E quando eu fizer isso, você verá minha mensagem de boas-vindas aqui e nome de usuário aqui. Então, isso significa que a afirmação de que damos esse valor é o que está sendo acessado por um nome de entidade. Então, claramente, não é isso que queremos. Não queremos ver o nome de usuário bem-vindo aqui. Em vez disso, gostaríamos de exibir o nome de usuário real. Então nós apenas damos a eles a variável apropriada que estaria armazenando o que nós pedimos para eles como seu nome de exibição. Às vezes, você deseja exibir um FirstName, LastName. É assim tão simples. Você atribui esse papel não são inflamação, em vez disso, a essa afirmação. E então ele vai ser exibido exatamente assim. Então, comigo trocando isso, se eu voltar e dar uma olhada na página, você vai notar que eu ainda vou ter nome de usuário aqui. Por que eu ainda tenho nome de usuário aqui? Mesmo que eu tenha dito claramente mudar e limpar. Isso ocorre porque a reivindicação foi criada ou todas essas afirmações são criadas. Esses objetos são criados e eles foram conectados e armazenados no cookie. Então o cookie ainda existe enquanto eu posso fazer alterações, mas até eu sair e log biquínis foi para reconstruir a identidade dos dados. Então, na verdade, é meio difícil mudar uma identidade depois que já é construído e já autenticado pode ser feito. Mas não é geralmente algo que as pessoas praticam para fazer. Então, o ponto é que você deseja construir todas as suas reivindicações e sua identidade antes de autenticar o usuário. Agora, eu vou apenas registrar barcos, então isso deve acabar com a sessão de login. Vejo que acabei de sair. Então vamos dar uma olhada no que as páginas de logotipo estão fazendo. Então crie novas receitas. Então, a página de resultados, você pode usar qualquer um vazio, tudo bem, mas queremos tanto a visualização e o código atrás. Então a vista está vazia. Mas o código por trás do Git vai fazer algo assim. Então você pode obter que não evite em gets método, você sempre pode apenas mudar é nosso próprio para ser um AsyncTask de resultados de ação em get, on, get assync. E então vamos sempre usar a chamada de contextos HTTP para o método assíncrono de inscrição, litígio em lugar algum assinando toda a autenticação de cookies, certo? Fora isso, queremos apenas retornar à página de índice de toda a nossa aplicação. Neste ponto, você provavelmente poderia pensar em URLs de retorno e todas essas coisas, mas nós não vamos entrar nessa fantasia. Só queremos saber que estamos desconectando neste momento, certo? Então isso é praticamente tudo o que o logotipo faz. Então vamos tentar dizer que preciso de mais uma vez. Então, se eu fizer login, estou na minha página de login, coloco minhas credenciais e aí vou eu. Não, está construindo a reivindicação com o valor do endereço de e-mail sendo Boston como o nome, limpo. Se eu sair vai acabar com a autenticação de cookies e me colocar de volta no, na tela de índice, certo? Se eu for para anúncios após o login ou, oh desculpe, esse não foi protegido após o login para categorias. Lá vamos nós. Se eu disser Lembre-se de mim, isso vai persistir. Portanto, mesmo que eu feche o navegador, o cookie ainda existirá. Clique em Login. E, em seguida, se nós apenas ir para Inspect Element ou F2 no seu teclado e saltar para o aplicativo. Você vai realmente ver os cookies que existem à medida que avançamos fazendo o CSE aqui, aplicativo de identidade, certo? Biscoitos, todas essas coisas. Então, se eu limpar, deixe-me apenas limpar todos esses cookies em logótipos login. Você verá aqui que o cookie é criado. Assim, no nível básico é como você pode habilitar a autenticação de cookies, como podemos exibir quem está logado e como podemos controlar o fluxo de nosso aplicativo e logotipos. Tendo escrito código a partir do zero. 6. Explorando reclamações e direccionadas de identidade: Ei pessoal, bem-vindos de volta. Então, na lição anterior, olhamos para como podemos acessar a reivindicação para que possamos configurar o login, Manter a autenticação de cookies funciona e tudo mais, todo o fluxo de trabalho. Nesta lição, queremos tipo de construir sobre esse conhecimento e olhar para o que seria necessário para facilitar o mecanismo de login de terceiros. Então aberto para saber que construímos nosso próprio mecanismo de login tão anêmico quanto o código de login é, certo? Não, porque codificamos o que procuramos. Nós provavelmente teríamos usado um banco de dados mais tarde nós vamos estar usando um banco de dados. Bem, só para passar pelo básico, vemos que verificamos a entrada versus os valores esperados. E então vamos em frente e fazemos a autenticação. Sabe o que acontece se você quiser confiar em plataformas de terceiros? Porque muitas vezes quando você vai para sites, você veria algo como um login usando Facebook login usando tutor login, usando Google, etc. E esse tipo de espíritos do usuário. O, o, o que devo dizer não, a tarefa tediosa de colocar no formulário de pedido de preenchimento quando eles já têm essas varreduras de um cone. Então aqui eu só queria mostrar o básico de como você iria facilitar esse buraco. Nós o adicionaríamos ao que temos atualmente. No entanto, não será capaz de fazê-lo até a conclusão, porque você vai precisar registrar seu aplicativo e obter um ID de cliente e segredo de cliente, que eu vou mostrar-lhe que se você tivesse todas essas coisas, o que seria necessário OFF você para obtê-lo trabalhando em seu aplicativo. Então ele começa no arquivo de inicialização, certo, bem aqui nós teríamos dito Autenticação AD. Dissemos que queríamos um esquema de cookies daqui. Nós podemos realmente, eu vou dizer cadeia de margarida, mas nós podemos realmente, usando a API Fluent, adicionar bibliotecas adicionais aqui, certo, então isso é cookie estranho, mas então e se esse ponto-e-vírgula não terminou lá eu poderia dizer algo como adicionar Google. E isso teria suas próprias opções. E a expressão lambda com opções que precisaria, certo? Então aqui, há obviamente uma linha vermelha, mas se eu fizer pontos de controle e tudo isso não me dá o prompt para a biblioteca. Isso é bom. Se formos para New obter tendências de vendas, que é um caminho de atalho. E claramente isso não funcionaria. Então vamos pular para um novo Git. E em bairros de fim de semana NuGet e encontrar as diferentes bibliotecas para nossos provedores OpenID. Então, se apenas escrevermos, deixe-me tentar abrir a identidade. Tudo bem, não OpenID, peço desculpas, vamos digitar autenticação. Então essa é uma biblioteca mais global para o que queremos. Então, sob autenticação, você vê muito, mas então você verá que nós também temos espaço para o Google, Facebook, Microsoft são co-propriedade e Twitter, certo? Então, para qualquer um destes que você deseja usar como um provedor OpenID para autenticação em seu aplicativo. Você pode ir em frente. Então vamos tentar com um Google. Na verdade, vamos instalar todos eles porque no final do dia, eu só queria mostrar como as sessões seriam para qualquer um. Tudo bem. Então eu instalei todos eles. E se eu voltar para o meu arquivo de inicialização, agora você verá que no Google não tem mais um erro. Então, como eu disse, eu posso nariz, queixo todos eles. Então o que eu vou fazer é apenas duplicar no Google. E a partir daqui eu vou apenas dizer adicionar Twitter. Facebook. Lá vamos nós. E adicione o Microsoft. Portanto, todas essas bibliotecas estão presentes um menor para usá-los como potenciais mecanismos de autenticação para o nosso aplicativo. Então, indo além de ter linhas adicionais, não, estou mostrando o que disparou no nível básico para conexão com esses serviços, certo? Assim, as bibliotecas, saberemos que os locais de API mantêm para falar com a API relevante para autenticação contra um serviço. No entanto, da sua parte como consumidor terceirizado, você precisa se certificar de que registrou seus sites ou seu aplicativo no Google ou no Twitter, Facebook, qualquer que seja. E eles forneceriam uma identidade e um segredo. Então você teria que fornecer esses dois valores, nulo. Neste ponto. Seria tão fácil como colocar a chave aqui e o segredo aqui, certo? Mas você provavelmente não iria querer codificá-los ou colocá-los em luz que no código-fonte. Porque quando você ativar isso no GitHub ou em qualquer formulário de controle de origem, ele será globalmente acessível a todos e qualquer um pode seqüestrar seu direito. Você gostaria de colocá-los em alguma forma de configurações que é seguro. Então, isso eliminaria por padrão também o arquivo AP settings.js ON porque isso seria tão acessível publicamente quanto colocá-lo no arquivo de inicialização. Então é aqui que falamos de segredos. Então, em seu aplicativo, se você é os projetos da web, você pode realmente dizer gerenciar segredos de usuário. E a partir daqui, você pode colocar em seus valores, seus pares de valor de chave. Então, por exemplo, se colocássemos o par de valores de chave são o ID e o segredo para, digamos, Google. Você criaria uma seção chamada Google talvez. E você vai notar que é o mesmo tipo de arquivo JSON que estamos acostumados com o aplicativo settings.js IN read. Então você diria Google e então você colocou a chave que seria reivindicada ID e então você colocou a chave aqui, o que quer que seja, a dela aqui, e me ajuda a acertar minha ortografia, então você teria seu cliente Segredo. Então deixe-me pular e ter certeza de que não soletrar incorretamente. Então você diria segredo de cliente e então você veria segredo aqui. Tudo bem, então isso é basicamente o que você faria. E então tantos como você tem, você tem o Google e o Facebook, certo? Será a mesma coisa, et cetera, et cetera, et cetera. Então, todos estes seriam armazenados em que secreta arquivo. E se no caso de você estar curioso sobre onde isso secreta está, ele está realmente sendo armazenado em como um diretório secreto que é chamado através disso, qualquer que este valor representa, é onde ele está. Então pensar que isso faz pouco sentido para você, e eu não posso explicar muito melhor do que isso é por que é chamado de segredo, certo? Então é aí que esses segredos seriam armazenados e qualquer coisa assim, quaisquer chaves de API ou qualquer coisa que seja meio seguro, você gostaria de colocar, certifique-se de colocá-lo dentro daquele arquivo de segredos de pontos JSON. Uma maneira alternativa de gerenciar os segredos poderia ser usar o console. Então, usando o console do Gerenciador de Pacotes, você pode realmente ver algo como os segredos do traço do usuário.net. Isso não completa o init e isso iria começar. E, em seguida, sob que você veria dotnet usa segredos conjunto. E então você colocaria como nossos pares de valor de chave, eu diria algo como dois-pontos do Google, ID do cliente, significando a seção no Google e o ID do cliente chave. E então o valor da chave aqui. Tudo bem, então qualquer que seja mais fácil para você, você pode fazê-lo embora. Essas ondas, talvez você não esteja usando o Visual Studio. Se você estiver usando o Visual Studio Code, provavelmente você gostaria de usar a abordagem de linha de comando de qualquer maneira. Então é aí que você armazenaria o segredo e tudo para acessar esses segredos, praticamente você teria que ir para a configuração. Então, em vez de escrever e o valor que você diria configuração e usando colchetes, você olharia para o valor da chave aparecendo então, a seção em vez de dois-pontos a chave, certo? Então, da mesma forma que você teria criado na linha de comando. Aqui estão áreas que só sabem apologistas, mas Google, isso é uma seção e, em seguida, ID do cliente deixe-me corrigir a ortografia para que eu sou consistente. Então Google e, em seguida, ID do cliente. E então ele saberia apenas ir e procurar nos segredos para a mesma coisa para um segredo de cliente e para todos os outros. Tudo bem? Então é assim que você iria proteger suas chaves secretas que você gostaria para sua API de terceiros. Então eu estou mostrando a vocês dentro do contexto de provedores de autenticação O que é em geral, se é um provedor de e-mail, são qualquer outra coisa que dada chave API que você precisa para manter seguro, Isso é todo dele, você basicamente faria isso e é assim que você acessaria quando for necessário. Agora, fora disso, se eu quisesse mudar talvez o esquema padrão do esquema de desafio em vez de cookies? Então, certo, não, o que temos é o biscoito como o que foi o primeiro que montamos. Mas antes de dizermos que eu faria cookies dentro desta Autenticação AD, poderíamos realmente mudar isso em uma configuração de opções inteira. Então eu vou usar toda a expressão lambda e, em seguida, o objeto. E, em seguida, dentro daqui podemos especificar todas as opções como ou ponto, autenticação padrão, esquema padrão Desafio, padrão de login ski, certo? Então, se você quiser por padrão usar o Facebook, você pode adicionar todas essas coisas aqui. Então, se eu disse que o esquema padrão deve ser o cookie de autenticação, tudo bem. Mas então e se o meu desafio, antes de criar um cookie, Meu ser seguido caldeus, ele e eu queria que fosse, Eu poderia dizer padrões do Google, que é uma constante que eu recebo. Lá vamos nós daquela Biblioteca do Google. Padrão esquema de autenticação de pontos. E tenho certeza que tenho esses padrões para qualquer outro. Então, os padrões do Facebook. Vamos ver se existe um. Padrões, pensamento, esquema de autenticação, certo? Portanto, qualquer um deles que você gostaria de ser o esquema de autenticação padrão, você pode ir em frente e especificar. Então, isso significaria que quando navegamos para uma página protegida por meio de nosso filtro de autorização, ele diria qual é a maneira padrão que eu quero que meus usuários autentiquem. Então, com a configuração automática de tudo isso, que era a autenticação de cookie padrão era um padrão. Foi direto nossa página de login, no entanto, não, Eu estou vendo se a pessoa não vai direto para a página de login, como eles navegam barra login e ir lá. Se eles vão para o endereço IP está protegido, então eu quero que eles vão direto para o Facebook desafio pH, momento em que o seu aplicativo iria navegar para o Facebook, permitir-lhes autenticar com sua conta do Facebook e, em seguida, voltar com todas as reivindicações e informações do Facebook. E então a coisa é que essas afirmações que teríamos configurado em nosso login como dinheiro, bem como as costuras, essas reivindicações são o que você vai chegar basicamente a partir de qualquer provedor OpenID, de qualquer autenticação em terceiros plataforma de autenticação. Estas são afirmações comuns que são partilhadas. Então é como um padrão. É por isso que quando LC e que, em seguida, mesmo que ele diz nome aqui, você verá este URL muito longo procurando. Então esse URL significa que cada aplicativo, não importa se é dotnet, Facebook, Python, qualquer que seja, todos eles podem chegar ao mesmo nível. E eu concordo que isso é o que eu chamei de afirmação é, e é assim que eu vou usá-lo em meu aplicativo. Tudo bem, então é isso que eu vou parar. Como eu disse, você teria que ir e assinar aberto, certificar-se de registrar sua inscrição e assim por diante. Mas no nível básico, é assim que você resolveria isso. Uma coisa que eu recomendo antes de seguir em frente, porém, é comentar o adicional. Então o demonstrar que segurar para adicionar o ID do cliente e o segredo usando a configuração. Mas, então, se você não fornecer nada sensatamente aqui, então você vai obter erros de tempo de execução. Eu recomendo que você apenas vá em frente e comente-os ou exclua-os, ou apenas tenha aqueles que você sabe que vai usar. Você, Eu vou deixá-los aqui comentou para que quando você visualizar o código-fonte, você pode ter I ponto de referência. Mas recomendando a você mais uma vez, comente-os para que quando você executar, você não obtenha nenhum erro de tempo de execução, certo? 7. Revisão da seção: Tudo bem, pessoal, então é isso para esta seção. Vamos fazer uma breve recapitulação do que conseguimos. Então viemos aqui, se soubéssemos de identidade ou não. Provavelmente sabíamos o que a identidade poderia fazer por nós. Mas nessa situação, começamos do zero a obrigação básica, base de dados básica. Seja básico ou complicado, os princípios permanecem os mesmos. Sabemos que podemos ir para o início da semana e um conjunto do banco de dados podemos configurar a autenticação em nosso aplicativo. Podemos informá-lo de que é suposto usar a autenticação de cookies. Podemos girá-lo para o caminho de login que queremos, seja qual for a página personalizada. Todas essas coisas maravilhosas. Podemos configurar nossa política de autorização global para o aplicativo. Assim, cada página por padrão precisaria ser acessada por um usuário autenticado. Nós também sabemos que na inicialização temos que adicionar o middleware para usar autenticação, que é recomendado que façamos isso antes de usar autorização, que geralmente sai da caixa de qualquer maneira. Bem, o lado de TI daquela porta nós olhamos para configurar um simples formulário de login. Eu tinha adicionado alguns links adicionais nós para exibir o que seria como quando nós exibir login com as plataformas de terceiros. E antes de seguir em frente da inicialização, também analisamos a adição de algumas das etapas para adicionar autenticação de terceiros sobre como ocultar a glândula chave de reivindicação secreta na parte secreta do nosso aplicativo dotnet Core. Então todas essas coisas maravilhosas que fomos capazes de realizar. Nós também olhamos para o fato de que podemos Olá anônimo. Então, se não fizermos, eles terão autorização global. Se quiser autorizar quem usaria colchetes e dizer autorizar sobre qualquer página ou ação que queremos restringir. Caso contrário, teríamos que dizer permitir anônimo se tudo for restrito, o que queremos permitir que certas páginas sejam acessadas por em pessoa autenticada. Então, como nossa página inicial em definitivamente permitir anônimo para que ele poderia ser a nossa página de destino. Analisámos também a criação das reivindicações de acesso. Então, após o login, sabemos como construir que reivindica identidade e seguida, o princípio de reivindicações e, em seguida, finalmente, assinar a pessoa, criando o cookie ao longo do caminho. E, em seguida, como acessar essas telas para exibir informações do autentica essa pessoa. Então, com tudo de repente feito, eu só vou verificar isso porque o GitHub é onde nós armazenamos todos os nossos camiões de mudanças, tudo o que estamos fazendo à medida que avançamos. Então coloca na minha mensagem rápida lá e ir em frente e cometer tudo e afundar e deixar que upload. E é isso para esta seção. Então, vejo-te em breve. 8. O que é núcleo de identidade: Ei pessoal, bem-vindos de volta. Neste módulo, vamos começar a olhar para a biblioteca de identidades e todas as funções que ela nos permite conhecer apenas para o contexto. núcleo de identidade ou identidade é a biblioteca que vem com qualquer velocidade em um aplicativo principal. E isso nos permite gerenciar operações e dados relacionados ao usuário com o Alltop interagir com código muito complexo. Embora a caixa, é verbal cheia unicamente. Se você precisar de um código complexo, poderá estendê-lo com bastante facilidade. Mas fora da caixa, tem sido bastante confiável e poderoso para você. E minhas necessidades, é claro, como sempre dizer, as regras de negócios de todos serão diferentes. Saiba, no que diz respeito ao que fizemos versus qual identidade nos permitirá fazer com a identidade. Não teríamos que escrever todas as reivindicações manualmente e construir tudo isso. O problema é que o que fizemos onde construímos nossas próprias reivindicações de usuário e identidade principal e, em seguida, criamos o vale do dinheiro do cookie. Isso provavelmente seria útil mais quando você estiver lidando com um aplicativo que precisa confiar na autenticação de terceiros. E, em seguida, ele passa por cima das informações, então podemos construir nosso dinheiro de reivindicações de usuário enquanto eles vendiam. Como se estivéssemos lidando com a JWT ou o terceiro fora, é quando acabaríamos precisando fazer tudo isso. Estaremos analisando cenários semelhantes aos mais tarde no curso. Então, você sabe, estamos apenas entrando em marcha para ver negócios inteiros do ASP.net Core com autenticação e autorização. Então, passos de bebê, porcas e parafusos. Mas, nesse nível, vemos como podemos fazer isso manualmente. Então, o que vamos fazer aqui é criar novos projetos. Agora isso é mais como um show e contar. Você pode seguir o que estou fazendo. Mas é opcional porque continuaremos a usar nossos sites classificados iniciais. Mas aqui vou mostrar como você seria capaz de criar autenticação, autorização, todas essas coisas no projeto desde o início. Então, se você fosse criar um novo projeto e escolher seu projeto web SBA.net Core, um novo funciona mais uma vez, o que é a web up ou o MVC? Ambos terão um VCs e listados aqui em algum lugar da lista, mas eles estão usando as páginas de barbear ou o MVC lá está. Seria o mesmo princípio. Saiba quando você passar por cima, você dá e eu vou dar o nome simples auth up. E clique em Avançar neste verde, você terá a opção de alterar o tipo de autenticação. Portanto, os classificados para saber não são seletivos e, por padrão, não será, não desculpe. Mas então, se você dissesse cones individualistas, então ele automaticamente lançaria certas coisas para você que facilitam a identidade fora da caixa são autenticação, autorização, todas essas coisas fora da caixa. Você também notaria que você tem todas as opções, você tem a plataforma de identidade. Então, cedo vale a pena falar sobre a adição autorização de terceiros usando Microsoft ou Facebook ou Google, etc., com esse autoboxing, apoiando o Microsoft. E então temos janelas que seriam mais parecidas se você estiver usando o Active Directory. E seus usuários precisavam se autenticar apenas estando na rede. Então, esse seria um tópico para outro curso ou mais tarde. Então podemos ver cones individualistas. E então vamos em frente e apertamos Criar. Assim que esse projeto for criado, podemos tomar nota de algumas coisas adicionais neste modelo que não estão em nossos modelos de classificador, certo? Então eu vou tê-los lado a lado para que você possa ver o que quero dizer. Então, em termos de dados, temos uma pasta de dados. Quando você não inclui identidade, você não obtém essa pasta de dados diretamente. Sabendo que a pasta de dados você automaticamente tem migrações e contextos DVI de aplicativos. Então eu tenho um projeto de dados em que eu teria tipo de construir essas coisas, certo? Portanto, temos migrações, temos os contextos de banco de dados do aplicativo. Claro. Mas se você olhar neste aplicativo contextos DVI, notará algumas coisas que são diferentes. Um aparafusado. Ele está herdando de contextos DVI de identidade em oposição ao que temos, que são apenas contextos DVI. Portanto, os contextos DVI fornecem uma conexão com o Entity Framework Core. Tudo bem. Tudo bem, informa que isso é o Entity Framework do banco de dados. núcleo é o que estamos usando. Blablabla, quem quer que identidade contextos DVI estenda contextos DVI e adiciona as tabelas relacionadas à identidade, alt off the box. Portanto, as tabelas relacionadas à identidade, que veremos em algumas, incluem tabelas para armazenar funções, informações sobre linhas, desculpas, informações sobre usuários, reivindicações, todas essas coisas. Todas essas tabelas serão geradas junto com o banco de dados assim que usarmos esse aplicativo, contextos VB. Tudo bem, nenhum contexto de banco de dados de identidade pode ser estendido porque você tem sobrecargas diferentes são coisas diferentes que você pode colocar em saquê e colocar como uma classe personalizada para o usuário, classe real personalizada e uma chave personalizada. Fora da caixa, temos usuário de identidade. Assim, esse usuário de identidade de classe representa essa entidade de cabeça vermelha. usuário apresenta a classe de usuário padrão que vem com identidades. Então, usando lotes de controle e adicionando instrução, certo? Você tem um papel de identidade, que também está fora da caixa quando se trata de identidade, realmente self. E então a chave aqui significa que tipo de dados devo usar para gerar o valor da chave? Então, em alguns casos, ou por padrão vem com string, certo? Portanto, teria bons valores como chaves para essas duas tabelas por padrão. Mas e se você quisesse usar números inteiros, então você pode decidir int. Então você estaria contando os contextos DVI e há algumas outras configurações que eles precisam colocar ao longo do caminho. Mas quando você quiser alterar esse tipo de dados, você pode fazer isso. Mostrar sua flexibilidade é, mas quando eu sair da caixa, ela será uma string. Não notei que ele vai parar de ser concluído. Então, estou tentando reduzir todos eles a personalizações neste momento. Então, quando deixamos esse padrão, ele não reclamará. E mesmo que não o qualifiquemos com tudo isso, esses são os padrões de qualquer maneira, no arquivo CSS de ponto de inicialização, você também verá que realmente temos tudo isso saindo da caixa. Então, sem adicionar identidade, isso teria sido tudo o que vimos no endereço no arquivo de inicialização, certo? Então eu realmente tive que adicionar isso manualmente com nossa startup. Isso foi adicionado manualmente. Mas então você vê aqui fora da caixa que temos o contexto de banco de dados nele com uma cadeia de conexão padrão. E também adiciona a identidade padrão com algumas opções e informa seu uso Entity Framework como as lojas. Tudo bem, então definitivamente estou alterando a caixa. Todas essas coisas meio que vêm conectadas. Outra coisa que podemos tomar nota é na pasta de migrações, na pasta de dados, veremos que saímos da caixa com uma migração. E essa migração cria todas as tabelas necessárias para a identidade. Portanto, integrais ISBN, é aí que as regras serão armazenadas. Usuários da rede Sbi. Veja que ele sai da caixa com todas essas colunas. Não, a classe que eu mostrei só sabe qual é o usuário de identidade. Esta classe dá acesso automático a tudo nesta tabela de usuários do AT. Portanto, por padrão, qualquer objeto de usuário de identidade terá propriedades. Só estou controlando clicando para ver se consigo entrar, veja a definição dessa classe. E lá vamos nós. Acabei de controlar o clique. Deixe-me voltar e mostrar a você, basta clicar com a tecla Control pressionada ou então Control clique em Adicionar usuário da entidade e, em seguida, Controlar clique no usuário de identidade em relação à string. E então isso nos permitirá ver todos os campos que estão lá. Portanto, esses são todos os campos IDE e normalizam e-mail, nome de usuário, senha, senha, hash. Todos esses campos correspondem à tabela para os usuários do ASP NET. Portanto, você não precisa escrever nenhum código excessivo para poder acessar esses campos. Outras tabelas incluem reivindicações de função. Então, temos uma ideia do que são reivindicações. Não sabemos necessariamente quais são as regras, pelo menos não dentro do grande esquema das coisas. Mas, basicamente, você pode atribuir reivindicações por meio de regras, também, reivindicações de usuários, sabemos quais são essas. Assim, você pode realmente armazená-los no banco de dados em vez de construí-los manualmente. Quando uma pessoa fizer login, será armazenado no banco de dados e carregado automaticamente ele será armazenado no banco de dados e carregado automaticamente em um cookie após a autenticação do usuário. Vermelho, temos ISBN no login do usuário. Portanto, este pode rastrear os provedores terceirizados que os usuários podem usar ou os cones associados a eles que eles podem estar usando para acessar seu site. Temos funções de usuário de amendoins. Então isso está dizendo: Quem são os usuários, quais são as regras e, em seguida, quais regras esses ISAF? Portanto, é como uma tabela de vinculador de muitos para muitos entre a tabela do usuário e a tabela de funções. Tolkien, este é, se estamos usando a referência de Tolkien, que veremos mais tarde. Então eu só estou mostrando isso fora da caixa e recebo todas essas tabelas. Você não precisa construir neve. Mais uma vez, se você já tem sua loja de usuários ou já está fazendo sua própria autenticação, mas você quer se estender para usar a identidade para lidar com essas identidades muito flexíveis e extensíveis e podem ser usadas. Com isso, mas isso está fora do escopo deste curso, pois estamos tentando entender o básico necessário para obter a autenticação em nosso aplicativo aqui. Tudo bem, então, quando voltarmos, o que faremos é adicionar autenticação em nossa autenticação adequada, nossa identidade, ao nosso aplicativo existente. Então, ao topo da caixa, teríamos sido capazes de dizer, bem, deixe-me desculpar, deixe-me pular para o arquivo settings.js IN do aplicativo. Então esse banco de dados teria sido chamado assim, certo? Então, toda a caixa, deixe-me fazer isso e podemos ir para a próxima lição. Se eu disser atualizar o banco de dados de hífen, o que isso fará é realmente permitir que ele gere a migração associada ao banco de dados ou a migração que saiu da caixa. E então, quando obtivermos esse banco de dados, e assim que isso for feito, agora posso acessar todas as tabelas que acabamos de ver no arquivo de migração, certo? Então, se eu fosse executar este aplicativo, então você vê que obtemos o mesmo boilerplate e fora da caixa, obtemos um registro e links de login. Então eu não criei esses desta vez. Fizemos isso manualmente com um classifica, mas aqui estão eles. E se eu clicar em Registrar, você verá que não fazemos, mas o que eu cadastro a página corretamente. Criando nossos cones, coloque e-mail, coloque senha, confirme a senha. Se eu for para o login, você verá que temos login. E então nos informa como provavelmente podemos ir a um barco sentado, monitores externos de login externos ou serviços de autenticação, como o que vimos. Então, só estou te mostrando isso. Sim, fizemos todo esse dinheiro descontroladamente. Só queríamos ver como tudo está conectado. Nulo. Sabemos como fazer isso fora da caixa se eu me registrar direito, não. E vou apenas escolher uma senha forte que sugerimos, se eu fizer o registro, que realmente irá para o banco de dados. Certo. E tudo isso antes deste processo são classificados como fazemos em cima de um banco de dados armazenando usuários, é por isso que ainda não temos um registro. Mas eu posso colocar em uma conformação para que possamos ver como realmente enviar um e-mail, mas eles estão simulando que confirmam o fluxo de trabalho de e-mail ali mesmo. E então, se eu voltar a fazer login fora do navegador lembrando o material, porque isso realmente não é nenhum recurso de identidade. Mas se eu pular para a tabela de usuários e visualizar dados, você verá que não há nenhum usuário armazenado, certo, esse usuário. E é assim que esse papel se parece. E veja essa senha. Portanto, lembre-se de que usamos uma senha de texto simples quando estávamos configurando nossa própria, claro, isso é um tabu no banco de dados. Seria feito hash automaticamente cortesia do nosso serviço de identidade. Portanto, esta é uma ferramenta pronta para uso muito poderosa e vamos nos divertir muito olhando as notas, a tigela, então tudo está configurado e como podemos maximizar nossa segurança usando os recursos prontos para uso da Microsoft. Então, apenas mais um login de teste funciona. Lá vamos nós. Então, exatamente o que fizemos, tudo isso. No entanto, não escrevi nenhum código aberto e já tenho um sistema de login totalmente funcional que já está seguro porque minha senha está sendo silenciada e posso facilmente começar a adicionar autorizar em qualquer lugar. E isso funcionará. Então, não volte, veremos como, se já criamos nossos projetos, sagrados, colocamos esse recurso nesse projeto. 9. Adicione identidade ao projeto existente: Tudo bem pessoal, então agora que sabemos fora da caixa o que obtemos com essa entidade e temos uma melhor compreensão de como ela funciona. Vamos começar a adaptar nosso aplicativo para fazer uso de bibliotecas disponíveis para nós. Então, algumas dessas coisas eu estou apenas apertando os olhos e literalmente tomo emprestado do que foi gerado com o juramento da pontuação da caixa se tivéssemos habilitado essa entidade desde a bala de início, é claro, vou explicar o que está acontecendo à medida que avançamos para entendamos o que é cada linha, quatro, certo? Portanto, já temos nosso contexto de banco de dados e sabemos que estamos usando nossa conexão de banco de dados, tudo bem. No entanto, o que precisamos adicionar é a ferramenta Identity, todo esse escopo. Então, vou pular para o contexto do banco de dados e vou informá-lo que não quero mais que você use apenas o contexto do banco de dados e eu queria usar contextos de banco de dados de identidade. Então lembre-se de que os contextos DVI de identidade são o que nos proporciona a capacidade de usar toda a caixa, as diferentes tabelas que podemos obter. Então, vou apenas ir em frente e incluir o pacote está sendo um ponto de identidade central EF Core. E eu deixei que ele ache que instale o bucket mais recente. E uma vez que esse pecado todas as lentes vermelhas aparecem e tudo parece como antes. Bom e fácil, certo? Portanto, não, teremos acesso automaticamente a essas tabelas. No momento, na classe de inicialização, precisamos informá-lo que queremos usar a identidade padrão. Então, vamos ver a identidade padrão do ponto de serviços e tudo o que você tem classes diferentes que você pode usar. O Azure AD Identity, o núcleo de identidade e você também tem uma identidade padrão. Portanto, a diferença entre eles é que, quando você diz que adicionar identidade padrão significa todas as configurações padrão, coloque-as lá. Você pode ficar muito granular e dizer adicionar identidade, e depois adicionar o que deseja e você sairá por um tempo que não quiser. E, francamente, acho que é muito mais trabalho que precisa acontecer. Eu entendo por que ele foi incluído, mas por uma questão de simplicidade e, francamente, muita caixa, é variável cheia. Só vou manter os padrões. Então, vou dizer adicionar identidade padrão e estamos usando o usuário de identidade. Portanto, lembre-se de que analisamos que essa entidade usa como a classe de usuário padrão que representa a tabela do usuário. Bem, depois disso, queremos como algumas opções. Assim, você pode adicionar opções para ver como queremos lidar com a senha. Então, queremos lidar com os requisitos de login, certo? Então eu posso apenas colocar essa expressão lambda. E, na verdade, deixe-me colocar isso em um objeto porque podemos ter várias opções em um bloco de objetos. E então eu posso começar a pescar adoções. Mas antes disso eu quero resolver esse problema, então eu preciso uma biblioteca e agradeço por isso através do ponto de controle. Então está tudo bem. O que vou fazer é pular para o nosso gerenciador de pacotes NuGet e vou procurar por Microsoft.NET dot Microsoft ASP NET Core identidade wi. Tudo bem, então é isso que nos dá os padrões são UI interna das páginas do Razor para o cloreto Entity Framework. Então, como eu estava dizendo, quando adicionamos identidade padrão, há certas coisas que acabam de sair da caixa para nós. Portanto, a interface do usuário é uma dessas. Então, vou apenas ir em frente e obter essa versão. E vou apenas ir para o arquivo CSS apenas para garantir que ele não seja adicionado. Agora uma coisa para 0 a l m aqui, e isso tem sido de muitas frustrações em cursos anteriores e até mesmo no meu trabalho. Se as versões aqui não fizerem muito , você pode acabar recebendo erros em erros inexplicáveis. Com andaimes. andaime está gerando arquivos ou gerando visualizações. Visualizações nos mecanismos automáticos do visual Studio e da estrutura. Se essas versões estiverem entre as bibliotecas de autenticação e as bibliotecas do Entity Framework, você encontrará problemas, certo? Então, às vezes você pode ter 0,09 ou pelo menos no momento desta gravação, ponto 0100 é elitista, certo? Mas se você tiver um que não seja 0.10.9, isso pode causar nichos. Então, quando chegarmos lá, se tivermos um AC, então vamos consertá-lo. Mas, de um modo geral, ele se relaciona a qualquer coisa relacionada à autenticação ou ao Entity Framework. Todos eles devem ser as mesmas versões. Tudo bem, então este ponto de informação aqui. Então, agora podemos confirmar que nossa nova biblioteca é adicionada se voltarmos para nossa inicialização arquivada e vermos esse erro. Aparece e isso é bom. Tudo bem, remova isso antes. Peço desculpas. Então é assim que sua linha deve parecer, certo? Então isso é espontâneo, então quais opções temos? Portanto, temos PaaS ou adoções de opções de login, de opções de usuário para a senha. Podemos especificar que queremos exigir um dígito. Então, sim, queremos exigir dígitos, verdade, certo? Assim, podemos definir a string de senha da barra aqui, e isso será global. Quantos personagens queremos? mínimo quer talvez 7 ou 7, acho que é um padrão. Mais uma vez, as regras de negócios diferem. Exigimos minúsculas. Nós exigimos não alfanuméricos? Precisamos de maiúsculas? Todas essas coisas? Mesmo que não especifiquemos essas opções toda a caixa, você precisará de letra maiúscula. Você precisará de um personagem especial e precisará desse dígito. E a senha deve ser mínima. Acho que oito personagens, isso é tudo fora da caixa. Então, mesmo sem ficar granular, como o que estamos fazendo aqui, seriam seus barcos fora da caixa, certo? Então, vou mostrar que todos esses requerem maiúsculas. E acho que é necessário não alfanumérico, verdade. Tudo bem. Então vou dizer à caixa que é o tipo do que você ganha. E embora a opção que possa ser útil seria a opção exigir confirmação no login. Então, as opções que o login exigiram que eu fui confirmação. Se você passar o mouse, ele lhe diz que tem esse sinalizador que diz que está confirmado ou não. Então você sabe, como quando você se inscreve em nossos sites e eles dizem, por favor , confirme o milagre antes que ele possa entrar e mais longe até que você faça isso, você não pode acessar o site ou é isso que isso traz para a mesa. Então, vamos colocar esse mecanismo de e-mail para sair e enviar o e-mail assim que uma pessoa se registrar no aplicativo. Então, fazendo tudo isso, vamos olhar para mais uma coisa antes de fazer uma migração e, em seguida, enganar ou melhor, gerar as tabelas. E isso está estendendo os usuários do Identity. Então, vimos as colunas e, mais uma vez, se você quiser saber quais colunas existem, basta pressionar F 12 ou clicar com a tecla Control pressionada e depois F2 novamente, e então você verá quais são as colunas. Bem, você notará que esses são padrões. Não há nada de terrível em FirstName, LastName, sabe, nada pessoal, nada de informação pessoal. Pebble o usuário. Então, de um modo geral, o que quer que você queira armazenar usuários, você gostaria de armazená-los. O que significa que teríamos que estender essa tabela de usuários de identidade para armazenar mais coisas. Então, o que você acabaria fazendo é talvez criar uma nova entidade. E vou dizer uma nova classe na entidade estável. Você poderia armazenar, você poderia criar uma classe chamada qualquer coisa. Alguém geralmente diria que usuário do aplicativo, você pode ver usá-lo contra um usuário da empresa. Às vezes você tem diferentes tipos de usuários com campos diferentes, certo? Então, talvez um gerente tenha pontos de informação diferentes do nosso usuário regular, etc. Então isso depende, certo? Professores do Sistema de Gestão da Escola, alunos como cetera, são todos usuários, mas com pontos de dados diferentes, mas, em última análise, você quer todos eles na mesma tabela. Então, o que é usável para passar por aqui com essa classe pode aplicá-lo a muitas outras classes. Então, se eu tivesse acabado de dizer usuário, e esta é obviamente minha classe de usuário personalizada. E então, para dizer usuário público, posso saber que ele herde do usuário de identidade. Então, um a pouco, herde do usuário de identidade. Ele assumirá automaticamente todos os campos que o usuário de identidade tinha disponíveis. Então eu posso adicionar ainda mais. Então, e se eu quisesse dizer, adicione uma nova propriedade de pouco tempo para acertar minha ortografia. E essa seria a data de nascimento. Tudo bem. Então, quero que meu funcionário ou meus usuários me digam a data de nascimento deles. E se eu quisesse nome e sobrenome? Então isso será uma string, FirstName e string, portanto, nome. Tudo bem, o que quer que eu queira, eu estou dizendo, você pode ter vários usuários, então isso é C, o adulto da estaca fora, basta usar muito se tivéssemos um professor e aluno do sistema de gestão escolar, certo? Então, um aluno provavelmente teria como um encontro matriculado, ensinaria, eu teria dia cansado, etc. Portanto, os diferentes pontos de dados se relacionariam com os diferentes usuários. Esse é um tópico para outro curso, mas isso é mais uma vez uma espécie de extensão que levaria um pouco mais de delicadeza na configuração. Tão aleatório, só vou mantê-lo simples e apenas ter minha classe de usuário personalizada, que tem os campos personalizados. Agora, quando eu quiser usar esse usuário personalizado após o contexto do banco de dados, saiba que você não está usando o usuário de identidade padrão. Então lembre-se, quando estamos olhando para o projeto anterior, poderíamos vir aqui e dizê-lo ao usuário de identidade. Mas, por padrão, ele sabe sobre esse usuário de entidade agora que eu queria usar o usuário. Portanto, ao participar de contextos DVI de identidade relativos ao usuário, ele saberá, olhe para o arquivo do usuário como um ponto de referência, que em cola essas coisas do usuário da entidade. E depois alguns, certo? Então, se eu não tivesse essa herança, eu teria um erro aqui. Como o contexto do banco de dados de identidade está esperando algo de usuário de identidade de tipo, certo? Então é por isso que você está vendo esse erro lá. Então você tem que se certificar de que tem essa herança acontecendo. Então é isso. Veremos isso como algo fora do tipo que está procurando. Então, é basicamente assim que você adicionaria nossos campos personalizados personalizados à tabela de usuários. Mas você não quer necessariamente remover campos se não usar a ajuda de campos ou usar os campos. Mas todo campo que é colocado lá é para um propósito específico, certo? Então, no final do dia, acho que essa configuração é suficiente por enquanto, vamos pular e adicionar uma nova migração. Então, quando estamos fazendo nossas migrações, temos que ver a migração. Identidades adicionadas. Tabelas, dê-nos ortografia certo? Em seguida, para t Tabelas. E, claro, depois de alterar os projetos padrão que vão em frente e geram. Tudo bem, então estou recebendo um erro muito desagradável aqui. E se você já fez algum dos meus cursos para, eu não me esquivo de Aras. Eu mostro os erros, então acho que estamos perdendo a configuração. E estou absolutamente correto. Então, deixe-me corrigir isso. Então podemos ver aqui que temos que usar o armazenamento de dados, então perdi essa etapa. Então, depois de adicionar identidade padrão e configurar todas as opções, precisamos dizer add. Os padrões são armazenamento ímpar do Entity Framework, portanto, ele sabe que ele deve ser usado no contexto do banco de dados do aplicativo para armazenar essas tabelas. Então eu acho que a flecha estava vendo que estou muito confuso. Rant nulla. Sei que deveria ser identidade. Sei que deveria estar em algum lugar, mas não sei onde colocar meu quieto, Fred. E enquanto estamos aqui, outra grande mudança que precisamos explicar é que precisamos saber mudar tudo para os contextos de nossa classe de usuários de custos, certo? Portanto, não podemos usar o usuário de identidade aqui, mas destinados a contextos BB, essas identidades são então tudo tem que ser meio uniforme. Então, usuário e vá em frente e adicione a instrução using para isso. Porque em nenhum lugar está fazendo tudo dentro do contexto do nosso custo na classe do usuário. Agora, depois de fazer esses Suchi e isso pisa a migração de anúncios novamente? E desta vez estou recebendo erros novos. Então, está me dizendo que a criação não modelo tem algum problema. Então, mais uma vez, estou trazendo isso através todos os movimentos porque às vezes você perde um passo e ele tem um efeito de ondulação sobre o erro não está necessariamente dizendo qual é o problema, certo? Portanto, isso geralmente é visto que uma das tabelas requer uma chave primária, algo, algo, algo, embora tenha a ver com o contexto do banco de dados. E o que não fizemos foi executar a base na criação de molal para o ModelBuilder. Tudo bem, então isso é basicamente apenas ver a força. O que vai entrar na praia antes mesmo de começar a fazer o que é suposto acontecer na implementação, certo? Então essa linha é absolutamente necessária para ancestral o que é identidade, certo? Então não era antes, é nulo. Então, estou apenas mostrando todas as pequenas nuances que vão para adicionar identidade a um projeto existente. Então, se tentarmos isso mais uma vez, então teremos sucesso. Tudo bem, tomei algumas tentativas, mas vimos o que pode dar errado ao longo do caminho. E toda vez que fazemos isso, deve ser uma experiência de aprendizado para que possamos entender o que está acontecendo. Portanto, não, vemos que temos uma migração que está trazendo os mesmos conjuntos de tabelas que acabamos de ver no arquivo de migração Box. Mas sabemos que temos colunas personalizadas em nossos usuários do ASP NET. Temos datas de nascimento, FirstName, LastName, bem como tudo o resto que estaria fora da caixa com esse usuário da entidade. Tudo bem, então é assim que podemos adicionar novos campos às nossas tabelas. Tudo o que temos que fazer é criar uma nova classe. Vá em frente e estenda a classe que for. Então, neste caso, eram usuários do ASP NET. Às vezes, você pode querer algo extra para a tabela de papéis tentando encontrar as linhas de herança toda que estava no canto superior direito. Então, tudo o que temos é o nome, o nome normalizado neste sistema simultâneo. Às vezes você quer estender isso por qualquer motivo, será o mesmo princípio. Basta ir em frente e estendê-lo. E, em seguida, na inicialização, você poderia especificar uma identidade padrão com os diferentes tipos. Na verdade, estaria aqui se adicionássemos as regras personalizadas. Então, não seria. Portanto, com base no tipo de uso da biblioteca aqui ou no método de extensão de serviço usado aqui. Você poderia adicioná-lo. Talvez você não consiga, neste caso, não é onde está. Se estivermos usando o núcleo de identidade ide, poderíamos tê-lo estendido para ver a vírgula do usuário, cliente ou com a identidade padrão do AD. Você teria que ver um laterals e, em seguida, dar a ele o novo tipo de função que você queria usar nessa configuração. Tudo bem, então essas são as pequenas nuances à medida que avançamos e como tudo se resolve. Mas, em última análise, fizemos nosso andaime, desculpe, nossa migração, não, vamos atualizar o banco de dados. E isso está feito. Portanto, nosso banco de dados simples que estava apenas armazenando informações confidenciais é nulo, será estendido assim que FA, lá vamos nós. E veremos que temos todas essas tabelas como vimos em nosso projeto anterior. Então saiba o que precisamos fazer é terminar a fiação para obter a página de registro na página de login em todas essas coisas funcionando. 10. Implemente registro seguro — Parte 1: Tudo bem pessoal. Então, da última vez que estivemos aqui, estávamos no processo de configurar nossas tabelas de identidade onde as desgastaram, as geraram em um banco de dados. Agora precisamos realmente configurar o aplicativo para buraco nulo para interagir com o banco de dados para uma distribuição em fins de login. Então, o que vamos fazer é ver como os fins de semana é um processo de distribuição seguro. E todas as coisas são nuances que precisamos considerar. Então, no arquivo de inicialização, só para começar, vou remover essa autenticação de adição porque não preciso mais dela. Não preciso especificar manualmente que estou adicionando um cookie e Crito kooky porque a identidade criará o cookie automaticamente. Tudo bem? Então eu posso realmente remover tudo isso. E podemos começar por aqui. Certo? Em segundo lugar, não precisarei da oferta especial ou da oferta personalizada que criamos, mas ainda não sou linear com eles. Antes disso, quero que vejamos como podemos gerar registro. As idades são período registrado em vez disso. Esse já está conectado para procurar no banco de dados e interage com todos os dados que estão sendo compartilhados. Portanto, esse processo é chamado de andaimes. Venho vendo andaimes muito. Então, quando vamos às páginas e vamos adicionar, podemos procurar um novo item desfiado. No novo item scuffled, você verá uma categoria que diz identidade e qualquer um pode clicar duas vezes nisso. E ele digitalizará suas bibliotecas, certifique-se de que tudo esteja bem. Em seguida, somos apresentados com essa caixa de diálogo que diz, o que queremos fazer? Então, mais uma vez, quase a caixa. Recebemos a página de registro, obtemos a página de login. Nós os conseguimos acessar através da interface da web. No entanto, os arquivos físicos não estão lá. Portanto, se você está adicionando identidade manualmente ou escolheu a opção para editar desde o início. Esta etapa é necessária se você precisar personalizar seu login ou sua página de registro, ou apenas adicionar qualquer uma dessas páginas aqui e qualquer uma dessas páginas. Você verá que podemos realmente ver todos os arquivos porque eles estão lá, mas eles não são fisicamente acessíveis. No entanto, Randall, não fui substituir todos. Só vou ficar com minhas armas e estou aqui para a página de registro. Então é tudo o que eu realmente quero lidar, certo? Nulo. E eles jogam, podemos fazer o login e logout e confirmar o conjunto certo, só estou aqui para o cone se registrar. Em seguida, posso selecionar que estou usando meu contexto de dados. E já conhece a música nós, nada sendo solicitado aqui, ainda assim o que for. E então eu posso clicar em Adicionar. E quando o processo de andaimes estiver concluído, você verá que temos uma nova pasta chamada áreas e áreas que você vê páginas e páginas de identidade e identidade. Você vê esses arquivos. E em um cone está o que realmente quer que seja o registro. Então, quantos arquivos você teria andaime, eles teriam sido gerados unbidden colocados ao longo dessa estrutura completa também irá para e é um Read Me que realmente não precisa certo? Não. Então, apenas um rápido início de combustível de tour. Só vai dizer qual carga Fei Li Yuan você pode realmente ter várias cargas rapidamente, porque sempre que você tiver um IRA ou uma nova área, você pode tê-lo. Use um layout diferente dos riscos do projeto, certo? Bem, estamos dizendo a ele para usar os layouts gerais encontrados no nível do projeto compartilhado, o nível de páginas compartilhadas do projeto. Temos importações de visão. Também temos esse tipo de padrões. Então, qualquer coisa que teria sido as páginas padrão lá é verdade. Está disponível aqui. Então isso é tudo isso. Mas se olharmos para a página de demonstração do CSE de ponto de registro e, de um modo geral, mesmo que você esteja usando um modelo de projeto MVC já arruinou um projeto, mas essas páginas que seriam usadas para fins de identidade geralmente serão Razor páginas, como em páginas HTML CSS, páginas Razor com o código por trás. Então, mesmo que você esteja usando um aplicativo MVC neste ponto em que definitivamente sobre a pobreza, tudo o que vou fazer é o que você estará experimentando. Parada completa. Então a página de registro vai com o formulário, à direita, Criar cones de Nova York. E temos todos os campos e a seção em barcos, os logins externos, tudo isso está lá. Se você quiser mantê-lo. Caso contrário, você pode modificar esse arquivo como desejar, é claro, dentro dos limites de permanecer funcional. Tudo bem, então deixe-me testar toda a redistribuição. Eu não vou entrar muito na explicação pesada sobre como tudo está conectado agora, eu só queria ter certeza de que funciona. Então, em nosso login parcial, saiba que temos a página de registro. Vou dizer para onde apontar. Então esse URL vai acabar ou não a tag âncora, em vez disso, vai acabar parecendo algo assim. Então ancora tag class nav link, ou seja, a seta B é identidade, certo? Então essas são as identidades ero. nome da área é B traço área e um SDS-PAGE é um registro de barra. Então é aí que eu quero que ele vá sempre que alguém vier ao aplicativo. Então registre-se. Então, vamos dar uma volta. Então, nesta página, clicamos no registro, e lá vamos nós. Onde na página de registro. Agora lembre-se de que autorizamos todas as coisas em nosso aplicativo. Então isso simplesmente significa que registre o juramento da pele a granel com aquela baixa inundação anônima logo acima dela. Certo? Mais uma vez, entraremos nos detalhes do que está acontecendo nos bastidores agora. Eu só queria testar distinto. Então teste administrativo. Deixe-me ver se consigo. Ok, então minha senha habitual é P em San ss WW já quer. No entanto, eu queria colocar uma senha fraca e vamos ver o que acontece. Então, vou colocar no teste de palavras. Você vê aqui, vendo que deve ter entre seis e no máximo 1, 100 caracteres de comprimento. Portanto, ele tem validação automática acontecendo. Não necessariamente por causa da política que colocamos, mas por causa do buraco a própria página, embora as caixas tenham sido projetadas. Então está tudo bem. Vou usar meu chavão longo especial. E então o segundo chavão mais. Tudo bem, então só estou mostrando o que sair da caixa apenas gerando a página de registro. Todas essas regras já estão sendo aplicadas para nós. Então, quando eu clicar em Registrar, vai nos trazer a todos como adotar confirmar o registro 0 página que eu mencionei. Simular o envio do e-mail para nos ajudar a se registrar. Então, vá em frente e confirme cones. Mas, como tudo isso não foi feito, vamos pular para o banco de dados e ver se funcionou. Então, no banco de dados, acabei de me registrar, eu deveria saber estar na tabela de usuários do ASP NET. E se eu visualizar dados para a tabela, você verá aqui e-mail de teste de administrador. Minha senha foi silenciada. Então isso não parece que a senha que digitei em P no San SS, eles serão OID um. E veja o que temos. Oh, está fora da caixa, certo? Também sou um usuário confirmado. Graças à simulação. Mas o que faz o Nordeste você notará que temos os campos personalizados, data de nascimento, nome completo, sobrenome. Todos eles estão em branco. Ela. E parece que eu posso ter usado o tipo de dados errado no sobrenome e usei. E vocês podem me corrigir. Oh, sinto muito por isso. Mas meu ponto é que o registro está funcionando. Tudo isso está conectado. Fizemos muito pouco para saber para fazê-lo funcionar, certo. Então, o que vou fazer é remover isso apenas porque usei o tipo de dados errado para o sobrenome. Então, vou remover esse campo. Vou fazer uma nova migração e fui ver o campo de sobrenome fixo. Você provavelmente não precisa fazer isso porque provavelmente viu meu erro antes de eu cometer. Se não, então tudo bem. Só estou fazendo isso para que eu possa ter certeza de que está tudo bem. Então você vê aqui, eu fiz uma alteração na classe de usuário, adicionando migração. Ele fará as atualizações. E então eu posso fazer um banco de dados de atualização. Então, ele atualizará esse tipo de dados para mim de acordo. Bom. Então agora sabemos que nossa página de registro está funcionando e tudo bem. Então esse é o primeiro passo feito. Quando voltarmos, veremos mais um barco ou um processo de distribuição e veremos em que outra consideração. Então, olhamos para o won, o que o código está realmente fazendo no, no código atrás do arquivo. Como podemos estendê-lo para realmente suportar os campos adicionais que adicionamos. E chegaremos a uma compreensão completa do que exatamente está acontecendo em geral. 11. Implemente registro seguro — Parte 2: Ei pessoal, bem-vindos de volta. Antes de seguirmos em frente com o sol, tudo sobre uma página de registro, eu só queria ressaltar que, se você estiver usando um aplicativo MVC e pode haver um tema adicional que você precisa fazer para obter sua URL para realmente veja o pH dentro das áreas, certo? Então, no assustador visto por padrão, ele tem nos endpoints e, em seguida, pontos finais sobre o controlador MAC. E então você tem as estradas e tudo mais. Você precisa ter certeza de que você tem endpoints, um esfregão, elevar o pH é toda alma. Então, se você estiver usando um MVC, uma boa linha que diz endpoints dot controller root. E então ele é especificado como um modelo, faz, cria uma nova linha e coloca endpoints em páginas de resultados de mop. E outra coisa que você vai querer fazer é garantir que você tenha serviços, as artérias das páginas. Então você provavelmente já terá serviços. O controlador se fundirá, certo? Sim. Isso é provavelmente o que você tem, certo? Nulo. Digamos que você queria ter certeza de que você tem páginas do Razor. Então esse é o outro desafio que você definitivamente precisa focar para colocar tudo em funcionamento. Então, depois de fazer isso, se você estava encontrando dificuldade antes, então você deveria ficar bem. Então isso indica inflamação para pessoas com MVC todos lá. Não. Vamos dar uma olhada no que está acontecendo com nossos registros. Então, vou fechar tudo o que não tem a ver com a atividade imediata em nosso registro. Nós tínhamos estabelecido que ele funciona. Também estabelecemos que ele está pedindo apenas o e-mail, a senha e a confirmação. Saiba que há várias coisas que podemos considerar. Primeiro, você notaria que o usuário de identidade por padrão tem o campo de nome de usuário. Ele também tem um campo de endereço de e-mail, mas estamos pedindo apenas e-mail. Se você olhar para o usuário que foi criado depois que nos registramos, verá que nós apenas dois. Oh, desculpe, eu removi. O que você teria notado esse nome de usuário e e-mail, mas os mesmos valores, certo? Ou para vê-lo valorizar, isso pode não ser necessariamente o que você quer. Às vezes, em nosso site, você verá um nome de usuário diferente do endereço de e-mail. E tudo é um tipo de Lando diferente e tudo bem. Mas nesta fase o que gostaríamos de ter certeza é que estamos capturando todos os campos na página de registro de que precisamos. Então, talvez a data de nascimento seja necessária. Nome próprio, LastName. Talvez o nome de usuário seja diferente do endereço de e-mail, claro, a senha. E então você vê aqui Sim, para número, certo. Seja o que for necessário do usuário, você pode adicionar ao registro na praia. Então, vamos dizer que eu queria e-mail. Eu também queria nome de usuário. Portanto, você deve estar familiarizado com formulários inteiros estão dispostos ou formulários buracos funcionam nas páginas do Razor. Então, se você tem esse modelo registrado e o que acontece é que temos esse objeto chamado artistas de outra classe chamada input, que estará armazenando esses campos diferentes que estamos pedindo. Portanto, teremos que garantir que essa classe de entrada tenha todos os campos que estamos pedindo ao usuário no formulário. É por isso que você vê usando a iluminação EM porque ele não está mais pedindo para usar. Não tem nossa representação ligada, fora do nome de usuário, mas tudo bem por enquanto. Então, estaremos usando e também a senha. E vou adicionar esses campos adicionais para nome, sobrenome e data de nascimento. Tudo bem, e para a data de nascimento, vou especificar que seu tipo é hora, nossos dados em vez disso, para que obtenhamos esse controle de janela de cores por padrão. Então, basicamente, é isso. O todo você deseja estender os campos que estão no formulário. Este é o primeiro passo. Você fará a representação dos campos que você quer que sejam corretos. Agora. O próximo passo seria realmente ter a classe de entradas adaptada acidentalmente para que eu possa controlar o clique nele, salta para as entradas. Então, vemos aqui comprando imóveis em ambos os modelos. Isso significa que ele está vendo o o-chem rastreando quaisquer dados colocados nos campos correspondentes para o modelo de entrada, conforme visto pelas entradas do objeto. Aqui está uma definição para o modelo de entrada. Então você vê tudo o que ele faz é que envie a senha por e-mail e confirme a senha. As validações estão lá, é por isso que recebemos essas mensagens de validação sobre o comprimento mínimo da chavão, certo? E o pé que eles precisavam para combinar com todas essas coisas estão lá fora da caixa. Alma, se eu quisesse estender isso, o que eu faria é deixar-me apenas copiar um deles que está lá. Tudo bem, então primeiro nome, primeiro nome, são nossos novos campos. Nome para exibição, nome próprio. Eu não tenho requisitos de comprimento e não é um chefe ou um tipo de dados, então não preciso de tudo isso. Então é isso para FirstName. Posso duplicar isso e fazer isso pelo sobrenome dela porque esses dois são praticamente a mesma coisa, certo? Ambos são obrigatórios. No entanto, para a data de nascimento, talvez as datas de nascimento não sejam necessárias, então vou colocar em data de nascimento, Putin, o nome de exibição. Mas não é necessário e definitivamente não é grande coisa se não for fornecido. Mas só estou mostrando como você estenderia esse vidro. Saiba quando volto para o formulário ou as linhas vermelhas desapareceram porque não, elas veem os campos. Tudo bem. Agora, quando clicamos em Registrar caso, então Nome de usuário, ok, levantamos todo o nome de usuário. Deixe-me ter certeza de que eu coloquei o nome de usuário. E o nome de usuário também seria necessário. E é aqui que ele pode ser criativo. Você poderia dizer que se você quer um uso diferente um improvisado, caso contrário, usamos o e-mail e ainda será plano que você pode obter criativos e experimentos. E acho que a fiação que uso para nome de usuário é diferente. Lá vamos nós. Então, quando pressionamos o botão de registro na página, o que acontece é que vai clicar na postagem. Então, em obtê-lo carrega a página. Tudo bem. Oh, isso funciona. E então você verá que eles têm diferentes bibliotecas de terceiros que não têm bibliotecas diferentes sendo injetadas, como Gerenciador de login, Gerenciador de usuários e remetente de e-mail. O remetente terá que transferir esse dinheiro descontroladamente. Então, mais tarde, faremos isso. Você também terá vários livros no logger, tudo bem. Mas entre a areia e o gerenciador de usuários de monitoramento, você tem muitos shuns de espuma poderosos e apenas funcionalidades gerais para ajudá-lo a manipular todas as operações relacionadas aos EUA, TODAS. Então, vamos continental o que acontece em postagens. Então, no post, conhecemos o retorno que você é um advogado. Temos os logins externos dos quais não há nenhum, certo? E também não precisa se preocupar com isso. Mas depois fazemos a validação. A validação é relativa a quaisquer regras de validação aqui, tudo bem. Portanto, se for válido, construímos nosso usuário. Portanto, observe que estamos vendo usuários var iguais a novos usuários. Se não especificássemos que estamos usando uma classe especial, então teria sido um novo usuário de identidade, certo? O que ainda funcionaria. Mas o fato é que estaríamos limitados a quais campos podemos e não podemos usar. Então note que temos a classe de usuário usando, posso dizer qual é o nome de usuário? Veja por que o nome de usuário e o e-mail obtiveram o mesmo valor porque, por padrão, você precisa fornecer um nome de usuário, você precisa fornecer um e-mail. E o que o código padrão faz é definir o e-mail como ambos. Então, agora que estendemos nosso formulário para realmente pedir nome de usuário, posso saber dizer que o nome de usuário está no nome de usuário, e-mail é um e-mail de ponto de entrada. E então eu posso fazer isso para todos os outros campos. Então, data de nascimento, data de nascimento não é insumos. Pensamento de nascimento, etc. Então, acabei de fazer isso para o sobrenome e o primeiro nome e a data de nascimento está dando um erro porque eu disse, string 1, deveria ser. Então, depois de fazer esse ajuste, podemos apenas revisar todo o nosso objeto de usuário. Então é isso que pretendemos armazenar. Não, você usará uma de nossas bibliotecas chamada User Manager. Vamos Baco, isso é usado para mantissa e está sendo injetado. Por isso, cortesia da biblioteca de identidades IL-4, obtemos esse objeto ou biblioteca do gerenciador de usuários que tem uma função simples que nos permite criar, o que estamos criando onde criar um usuário e estamos dando a eles essa senha. Portanto, lembre-se de que teríamos digitado essa senha em texto sem formatação. Mas quando esse método terminar, ele o teria silenciado até o ponto em que seria completamente irreconhecível como em qual alfa, o mesmo chefe ou sempre parecerá diferente na tabela porque eu seguiu este método hash na postura. Portanto, o hash é um procedimento muito importante onde obscurecemos a apresentação da senha para armazenamento. E é sempre uma operação unidirecional para que você não queira usar senhas com hash, senhas hash e, em seguida, você hash outra string para comparar com o silêncio original, certo? Então você obscureceu uma senha. E então, quando a pessoa chega ao login, você obscurece o que ela digitou e instável ambas as versões obscuras que são parecidas. Se não o fizerem, isso falhará. Bem, você não quer que o que esteja armazenado no banco de dados para então comparar. Tudo bem, então o hashing é um protocolo de segurança muito importante que esconde ou senhas. Tudo bem, então depois desses, isso pode ou não ter conseguido e, se fosse dito que um resultado, os pontos foram bem-sucedidos, então ele irá registrar, ok? Sim, bom. E o login é muito importante para aplicativos ou ferramentas baseadas em segurança. Segurança fora do aplicativo a propósito. Então você verá essa coisa um pouco mais de registro mais tarde. O que isso fez é gerar um código token. Não, podemos mudar o gerente de Tolkien, o que significa que podemos usar nosso próprio corpo porque usamos a identidade padrão. Estamos usando o mecanismo de token padrão. E que Tolkien é basicamente apenas esse fato, silêncio, corda de silêncio. Você veria no final de um URL ativo, eles recebem esse e-mail de confirmação. Clique aqui para confirmar ou clicar no URL. Eu sou o URL www_website.com barra esta longa combinação alfanumérica. Isso é o que isso faz é gerar o código para nós em relação à inflamação que o usuário forneceu. E então ele o codifica e, em seguida, envia arte cria um URL. Então diz que o URL de retorno de chamada é esta página, certo? E está adicionando esses valores ao e-mail que serão enviados eventualmente. Então, como eu disse, vamos ser tampos de fiação com realmente despachos esse e-mail. Mas eu quero que você aprecie tudo o que está acontecendo aqui. Então, tudo isso gera esse Tolkien para você. E então ele envia esse e-mail. E então, se usar uma assinatura de opções de pontos do gerenciador exigir nossos cones confirmados, então ele redireciona para essa batida. Então note que esta é uma Piazza que não criamos, mas apenas adicionando identidade padrão, ela realmente foi tão grande, certo? Nós não o criamos, não criamos o seu próprio. Nós apenas brigamos em um, mas mais uma vez, porque você adicionou identidade padrão, essa interface está implícita em nosso projeto. Somente se precisarmos modificar algo, então precisamos realmente gerar essa página física como fizemos para o registro. Então, certo, não, sempre lerá Erich nessa batida. Então, quando configuramos nosso mecanismo de e-mail, podemos realmente remover essa parte dele. E então podemos redirecionar para a maneira como podemos fazer login na pessoa ou outra e, em seguida, redirecionar para o URL de retorno. Então isso significa que se a pessoa estava na página de categorias e depois clicou em Registrar, sabemos que o URL de retorno, sabemos como isso funciona por nulo. Tudo bem? Mas o gerenciador de login é outra variável para a biblioteca mais próxima do login neste usuário, estou decidindo que o gerente realmente cria esse cookie, dá a eles as reivindicações como armazenadas no banco de dados e autentica esse usuário por completo. Então, estamos vendo um pouco mais disso quando entramos na parte de login de nossas atividades. Então, isso é basicamente o que está acontecendo quando clicamos em Registrar. Todo esse código pode parecer simples. A arte é simples e é muito simples por causa dessas bibliotecas auxiliares que nos são oferecidas pelo conjunto de ferramentas de identidade. Mas é um processo muito, muito complexo no balde. Tudo bem, então, se todos esses falharem e o usuário, se não for bem-sucedido, serão os Federals e válidos. Ele apenas irá em frente e compilará todos os erros e retornará a página. Então, o que vou fazer é testar a mãe ou distribuição apenas para garantir que tudo ainda funcione. Tão nulo em nosso registro. Portanto, não seja AGC, embora tenhamos todos os campos que tínhamos específicos. Tudo bem, Então, em vez de nome de usuário aqui, estou disposto a dizer admin, admin test.com. primeiro nome é admin, sobrenome é teste e, em seguida, data de nascimento. Basta escolher o dia. E então minha senha especial, que é p no alelo San assist ou D1. E apenas repita isso. E então podemos acertar o registro. E somos redirecionados para essa confirmação de registro. Saiba o que é tudo isso sobre esse token. Se você olhar para esse URL, se você passar o mouse sobre ele e olhar para o URL que aparece, verá que tudo o que vem depois que o ID do usuário é igual, ou seja, bem, esse é o ID do usuário no banco de dados. E então você verá que você tem um comercial e, em seguida, o código da palavra, e então tudo isso depois do código é que Tolkien, que LC e é gerado, certo? Então, não fizemos nada disso, tudo isso fora da caixa. Então acabei de confirmar um cone e tudo bem. Então você vê aqui essa citação que eu mencionei todo esse código Tolkien que foi gerado. Então, deixe-me tentar outra distribuição, na verdade, vou usar o usuário da costura. E eu, estou apenas, estou apenas forçando um erro para mostrar o que acontece quando certas restrições são violadas. Tudo bem, então, usando as mesmas coisas, você verá aqui, diz que o administrador do nome de usuário já está tomado. Então, quando gerou essa lista de erros aqui, isso significa que o resultado não foi bem-sucedido porque tentou criar. Mas, em seguida, com base nas restrições econs off para uso com o mesmo nome de usuário fora da caixa. Existem certas restrições, certas coisas que nos dirão como obtemos feedback háptico. Podemos twittá-los à medida que avançamos. Podemos criar nosso usuário personalizado gerencia regras de autenticação personalizadas, tudo o que precisamos. Podemos fazer uma identidade estendida conforme precisamos. Então, quando voltarmos, vamos dar uma olhada no que é preciso para configurar essa confirmação de e-mail para que, quando nos registrarmos, possamos ver esse e-mail, por assim dizer. 12. Implemente verificação de e-mail para registro: Tudo bem pessoal. Então, estamos de volta. Queremos configurar nosso remetente de e-mail e todo o envio desse e-mail depois que o usuário se registra, aqueles que estão longe em produzir as taxas de sucesso de metoxi pequeno 1 e 2. Ele aumenta o nível de segurança e meio que traz uma autenticação de dois fatores no Kindle para regime. Mesmo que não seja a opção mais segura, ela ainda traz esse nível de segurança. Então, definitivamente vamos ver como ele é implementado. E, por extensão, daqueles que têm o remetente de e-mail funcionando para se registrar, você notaria que existem outros procedimentos, como redefinição de senha. Embora as duas coisas que nossos e-mails serão despachados e vamos configurar o remetente de e-mail em relação à nossa tarefa atual, que está registrando bem nosso usuário, essa interface do remetente de email I email pode ser acessada em qualquer lugar. Você sempre pode simplesmente registrá-lo da maneira que vou registrá-lo em startups para que ele possa ser usado em qualquer outro lugar. Tudo bem, então vamos ver o que é preciso para obter esse ganho aberto. Primeiro, depois foi criar uma nova pasta. E vou chamar isso de serviços. E nos serviços vamos adicionar uma nova classe. E eu vou ligar para essa classe apenas enviar um e-mail para o remetente. Tudo bem, então temos nosso remetente de e-mail de classe e ele herdará do remetente do e-mail. Portanto, esse remetente de e-mail implementará o método enviar e-mail assíncrono. Então isso é definitivamente o que precisamos. Antes de prosseguirmos, quero registrar isso na inicialização. Então, eu queria ter certeza de que o aplicativo saiba que temos esse serviço em execução. Então, vou dizer que os serviços de ponto adicionam, transitórios. E estou vendo que o remetente de e-mail será implementado pelo remetente de e-mail. E depois adicionamos qualquer falta ou, por exemplo, pior. Não, estou deixando isso aqui por enquanto, mas definitivamente vou revisitar isso porque acho que quando terminarmos aqui terá que escrever essa linha de forma diferente. Portanto, não há problema. Então, o que vou fazer no i-beam na classe de remetente de e-mail é configurar alguns campos para nosso servidor ou porta em nosso endereço. Alguém que esteja usando SMTP como sessões. Portanto, para essa atividade, como Oh, estamos em um ambiente div e nem todos podem ter acesso a um servidor SMTP e assim por diante. O que usaremos é o servidor SMTP do host local. E estaremos olhando para uso suficiente. Então, para nulo, temos os campos. Portanto, temos os campos para o servidor SMTP, portas SMTP no endereço de e-mail. E então eu tenho um construtor que inicialmente os está inicializando para que você possa pausar e replicar isso. Agora, no Send Email está vendo capturado, eu vou fazer é construir uma mensagem. Então diga var message z igual a uma nova mensagem. Então, nossa nova mensagem de correio. E isso vai exigir a biblioteca masculina dotnet dot do sistema. E dentro dessa mensagem de correio, podemos configurar o dos assuntos do corpo e o corpo está certo. Para que possamos configurar todos esses. Porque mande-me colocar uma pia é um esperando aqueles de qualquer escaldante. Portanto, temos todas essas informações disponíveis ferramentas. Vamos para código rígido ou de endereço de e-mail porque, de um modo geral, você enviaria de como eu não respondo, não há repetição, algo assim. Isso realmente não importa. As regras de negócios diferem. Estamos apenas passando por uma configuração básica. Agora, depois de tudo isso, vamos definir o ponto de mensagem adicionar e adicionaremos um novo endereço de refeição para o endereço de e-mail para o qual se espera que seja enviado. E então vamos invocar um cliente SMTP usando o servidor SMTP e os valores de porta que teriam sido passados pelo construtor e serão um envio dessa mensagem ao ar livre. Só retornaremos que a tarefa foi concluída. Então esse é o básico do telefone celular, remetente de e-mail usando SMTP. E tudo o que eu disse que vamos fazer tudo localmente usando nosso próprio SMTP. Então, o que vou fazer é modificar esse arquivo de inicialização e r, desculpe esta linha na inicialização. E o que vou fazer é adicionar transitório e informá-lo que o provedor de serviços, assim como o que S aqui representa o provedor de serviços. Então eu posso informá-lo que será novo remetente de e-mail. E, em seguida, o remetente de e-mail usa esse servidor SMTP como o primeiro parâmetro. Tudo bem, então vamos dizer host local ou qualquer que seja o servidor SMTP que você está usando. Algumas pessoas realmente colocariam isso dentro do arquivo de configurações do aplicativo e, em seguida, chamariam a configuração. Existem tantas maneiras de fazer isso. Usaremos o retrato padrão é 25. E, em seguida, o endereço de e-mail, vou dizer que não responderei. Classified.com. É de onde se espera que o e-mail seja enviado. Então é basicamente assim que isso vai parecer na startup. Agora vamos ao nosso servidor SMTP. Então, vamos usar este servidor Luca SMTP chamado papel, que você pode chegar a um painel de ponto de corte de papel smtp.com. E funciona como um servidor SMTP e visualizador de e-mail. Portanto, é uma ferramenta muito útil para desenvolvimento, estilosa onde você só quer ver, esse mecanismo de e-mail funciona? Estou vendo o que preciso ver nos testes, certo? Então você pode ir em frente e ler sobre isso, se quiser. Mas para anômalos interessados em baixar a versão mais recente. Então eles estão hospedando no GitHub, podemos fazer o download. E quando a configuração estiver em andamento, você pode ser solicitado a passar por elas. Então você pode simplesmente ir em frente e instalar. E uma vez concluído com sucesso, você pode ir em frente e abri-lo em sua máquina para que você possa clicar em Iniciar, Pesquisar cortes de papel e uma janela semelhante a esta deve aparecer. Você também pode precisar liberar no firewall para permitir o acesso para que ele saiba que minha máquina sabe confiar neste aplicativo. Tudo bem, então é assim que o gerenciador de e-mail se parece. Mas, mais uma vez, está dobrando como SMTP. Então, vamos dar uma volta. Então, estou apenas preenchendo minha página de redistribuição com alguns dados de teste e, em seguida, vou clicar em Registrar. Então, como de costume, estamos navegando até a página de confirmação do registro. Certo. Então diz, por favor, verifique seu e-mail para confirmar os cones da Europa. Portanto, observe que não vai mais para essa simulação. Se eu examinar o sistema de coordenadas para a página de registro rapidamente, o que foi? Dizia que ele vai enviar o remetente do e-mail e depois ver se as opções exigem confirmação de nossos cones, depois vá para a confirmação do registro. Tudo bem. Tudo isso, tudo bem. Mas se eu entrar no pagamento por clique, você verá aqui que recebemos o e-mail. Tudo bem, por favor, confirme seu artigo e clicando aqui, bem, isso é exatamente o que eles disseram. Confirme suas colunas clicando em. E então temos a tag âncora com a codificação HTML do nosso URL de retorno de chamada e do código Tolkien. E tudo isso para ver clicando aqui, certo? Então isso é básico o que isso traz para a mesa. Então, sim, podemos testar o e-mail e tudo o que vemos que ele funciona, como exatamente ele funciona, tanta informação quanto você quiser apresentar ao usuário, certo? É aí que você faria isso. Então, vou ver clique aqui. Ele navega e depois diz: Você não está confirmado. Tudo bem, como sei se estou realmente confirmado ou não? Podemos simplesmente pular de volta para o nosso banco de dados como levodopa aqui. Se eu atualizar e examinar todos os usuários. Então, aqui está esse usuário recente. Você verá aqui que o e-mail foi confirmado. Então esse é o que acabei de confirmar via e-mail. E observe mais uma vez com as senhas todos os três chefes ou é diferente? Bem, eles são os mesmos. Esteja dizendo que Este é o azul ou ID1. Tudo bem. Então eu acho que é isso para não. Então, como eu disse, esses remetentes de e-mail serão usados em vários lugares para vários testes e situações. Desculpe, deixe-me pegar meus rolamentos. Portanto, este remetente de e-mail enviará e-mails para distribuição, confirmação para Esqueci a senha e para qualquer outra coisa que você precisar. Assim que você tiver este servidor SMTP cortado em papel em execução, sinta-se à vontade para testar esses e-mails sobre como eles serão em diferentes configurações e situações em todo o lugar. 13. Considerações adicionais de senha: Bem-vindo de volta pessoal. Então, estamos configurando nossa distribuição e implementando a segurança. E analisamos brevemente algumas das opções de segurança que são meio incorporadas à identidade que podemos simplesmente colocar no pipeline. Saiba que o tema recorrente da ordem com identidade é extensibilidade, porque não o tempo todo, você obterá as opções padrão que atendem às suas necessidades específicas, suas necessidades comerciais ou o que quer que você queira realizar. Estas são finais dos bulks até certo ponto. Bem, 20 só quero ir apenas aquela pequena vantagem. Talvez seja necessário escrever algumas extensões. Então, nesta lição, vamos procurar adicionar segurança de senha adicional. E essa segurança adicional de senha pode ser orientada pela sua visão para quais senhas seguras precisam estar em sua organização específica ou em sua configuração específica. Então, globalmente, sabemos que queremos exigir dígitos assim por diante. Nada menos que oito personagens, sim, maiúsculas e todas essas coisas. Claro. Mas e se você quisesse ter certeza de que palavras-chave específicas não estavam na vida deles, talvez, nome da empresa, ou mesmo o usuário. Às vezes, os usuários usam seu próprio nome como senha, coisas assim. Você poderia realmente ajudar a mitigar contra certas coisas que, ao escrever seus próprios métodos personalizados, são funções. Então o problema é que, neste momento, a identidade padrão de ponto de serviços adicionamos em Add Entity Framework armazena como dissemos a ele para usar os contextos DVI. Mas, na verdade, poderíamos adicionar mais a esse pipeline. Então, vou remover esse ponto e vírgula e fui para a linha para que possamos ver onde cada um começa e pára. E então, por baixo daquele, eu poderia dizer ponto. E se você olhar para o que você obtém, você vê que você tem algum quilo Parte dois, deixe-me dizer apenas dados financiados, deixe-me começar a digitar validações e para que você possa adicionar uma validade de senha pode adicionar um validador de regras, usuário do Canadá validador. Se você quiser escrever métodos de extensão, que é o que faremos para o pipeline de senha ou o pipeline de validação. É tão fácil quanto colocá-los no serviço de identidade que você está adicionando. Você pode simplesmente adicioná-los. Portanto, qualquer cota personalizada que você precisa escrever, ou se você quiser usar seu próprio provedor Tolkien, loja de usuários de heroína, seja lá o que for, porque você pode não estar necessariamente usando o banco de dados fresco como nós. Ele pode ter um banco de dados e você quer usar sua própria loja. Todas essas coisas são possíveis. Então, vou fazer o validador de senha. E aqui vou ter aula que alguém chamar o serviço de validador de senhas. Então você apenas dá a classe que pretende usar ou criar. No nosso caso, vamos criar isso. Eu já o criei, então está tudo bem. Você pode ir em frente, fazer o botão de aula lá. E depois adicionei uma nova pasta na entidade Adicionar e coloquei essa classe lá. Então você pode simplesmente ir em frente e fazer isso. E praticamente isso é um padrão para qualquer outra personalização ou extensão que você deseja adicionar a esse pipeline de identidade. Então, quando eu salto para essa classe, as características de marca registrada dessa classe padrão CSS, mas ela está herdando do validador de senha i com os contextos de nossa classe de usuário personalizada. Então eu fomentei o validador vem da nossa pasta de identidade Microsoft dot ASP NET Core, ou desculpe, biblioteca. E o usuário vem do namespace de nossas entidades. Assim, você pode ir em frente e digitar que o ponto de controle não utilizado inclui as referências ausentes. Depois de fazer isso, você precisará implementar a face do usuário, que fornece esse método chamado validar um coletor. Assíncrono financiado leva o gerente, bem como o objeto do usuário e a senha à medida que eles estão sendo criados durante o processo de registro. Então eu fui em frente e coloquei um código de exemplo sobre o que poderia acontecer por aqui. Só estou vendo se a senha atende essa condição e se você não quiser, você tem todas as suas condições, seja lá o que for, você passa a senha através de seus cheques e saldos. Se ele não atender à marca. Ele suas regras de negócios porque só chegará até aqui se a senha RD MIT esses requisitos. Então, se ele atender a esses requisitos, então vai aqui e dizer, ok, deixe-me examinar ainda mais essa senha com base no que a empresa quer. Portanto, a empresa quer, se não atender a esses requisitos adicionais, retornaremos o ponto da tarefa dos resultados e dos resultados da identidade. Então esse método usa resultados de identidade, certo? Porque é isso que isso está retornando. Portanto, devemos retornar esse resultado de identidade e falhar que leva uma série de erros de identidade. Assim, você poderia compilar essa área, compilar a área, compilar áreas tantas violações quanto você compilar essa área, adicionar um novo erro de identidade por violação e, finalmente, terminar com esse resultado. Retornando o campo de resultado da identidade com talvez toda a matriz de erros. Essas são as áreas que são exibidas na página Registrar como os erros, vendo por que você não pode se registrar. Então lembre-se de que quando tentamos nos registrar se não colocarmos uma senha forte o suficiente ou o nome de usuário foi tirado, ele voltou e disse: Ei, isso está errado. Então, praticamente erros de identidade. Isso é o que será exibido na página. Uma vez que esses bônus. Se tudo estiver bem, então retornaríamos o sucesso do ponto do resultado da identidade. Que se voltarmos para a página de registro, você verá muito disso pergunta se um resultado ponto sucesso. Então, o resultado de eu tentar criar esse usuário se ele for bem-sucedido, então prossiga. Caso contrário, exiba os erros que voltaram do resultado. Então isso é tudo o que está acontecendo aqui. Então eu atualizei esse método para levar para casa meu cenário que acabei de pintar. Então vamos dizer que temos um monte de coisas que estamos procurando. Vou começar inicializando uma nova lista de erros de identidade. Então eu tenho as diferentes formas. Portanto, uma verificação pode ser que, se a senha contiver o nome da empresa, então você adiciona uma identidade, ERCP e que o código é o nome da empresa, qual é a descrição, que é o que realmente imprimiria na página para o usuário, é que você não deve conter o nome da empresa, certo? E embora um, se ele contiver um primeiro nome ou o sobrenome que o usuário está inserindo, então nós buzzword, não podemos ou não deve conter seu nome. Este usa mais e-mail. Você não quer que eles coloquem isso também. Você coloca uma mensagem apropriada. Então, depois de todas essas verificações, ele apenas adicionará novos erros, adicionando novo Eris à lista. E então, se no final dela realmente tivermos erros em vez de lista, queremos retornar que ela falhou e queremos converter essa lista em uma matriz. Por que eu faria isso? Porque lembre-se de que está assumindo IRI de erro de identidade. Então, tínhamos uma lista compilando. Nós apenas o convertemos em uma área de último minuto para enviar dinheiro com a falha. Caso contrário, foi uma tentativa de criação promovida com sucesso. Então, neste momento, para a refeição, então, considere a integração com serviços de terceiros. Mais uma vez, depende de suas regras de negócios, então estou apenas dando as ideias. Mas você tem serviços de terceiros lá que o ajudam a determinar a força das senhas em relação a quantas vezes essas senhas podem ter sido violadas no passado. Então, o exemplo típico de tal serviço seria PEW 100.com, PWN ED.com. E eles realmente dizem que, ok, essa senha foi violada. Talvez eu tenha companheiros em tempos no passado. Portanto, você não quer que seus usuários usem o símbolo de violação. Senhas são possíveis. Os resultados são conhecidos por serem vulneráveis, como senha RP no sinal como sístole ou ID1, como estou usando, à direita. Assim, você poderia se integrar com outras peças ou serviços de terceiros Naquele momento para tornar todo o seu fluxo de trabalho de validação mais hermético, divertido, embora seja basicamente isso. Acabamos de estendê-lo para que lhe dê uma corrida rápida. Tudo bem, então aqui estão apenas durante um novo usuário. E o que vou fazer é colocar a senha, certifique-se de que ela atenda ao tamanho mínimo. O que vou colocar no teste de palavras. Tudo bem? E vou fazer a mesma coisa, não ouvir. E não tenho certeza se isso funcionará corretamente porque não estou fazendo sensibilidade às maiúsculas e minúsculas, então definitivamente vou precisar de uma modificação. Portanto, o código para garantir que ele faça uma verificação diferenciada entre maiúsculas e minúsculas para as cadeias de caracteres. Mas eu só queria ver o que acontecerá. Portanto, não está sendo executado no modo de depuração, quando clico em Registrar, você vê aqui a senha não deve continuar seu nome. Então, está ganhando dinheiro com aquela mesma época em que nos sentamos. Tudo bem, então pause todo o resto, mas falhou nas medidas mais rigorosas que implementamos para que seja realmente mais simples estender a funcionalidade dos Serviços de Identidade. 14. Fundamentos do registro — Revisão da seção: Certo pessoal, então estamos prontos para fechar esta seção ou módulo. E acho que fizemos algum trabalho específico aqui. Então, adicionamos identidade ao minuto do nosso projeto, estendemos a classe de usuário criando nossa própria classe, atendendo a ela herdada do usuário de identidade. Podemos colocar em nossos próprios campos personalizados. Depois de fazer tudo isso, tivemos que o contexto do banco de dados saber que cada um deveria estar usando o contexto de banco de dados de identidade em oposição a contextos de banco de dados irregulares dentro do escopo do que nossa nova classe de usuário oferece. Também tivemos que nos certificar de que colocamos essa base na criação de modelagem porque vimos a era que temos com crianças mais velhas. Além disso, fizemos nossa migração, que nos deu um arquivo de migração adicional que criou todas essas tabelas relacionadas à identidade para nós no banco de dados. Agora, neste momento, provavelmente deveriam ter mencionado isso antes, mas há momentos em que você pode querer manter um armazenamento de usuário diferente do banco de dados transacional real. E nesse ponto, seria tão fácil quanto criar um contexto de banco de dados diferente e dar-lhe sua própria cadeia de conexão na área de inicialização dot cs, certo? Então você teria dois desses, um para os defensores em contextos DVI, em 14 para contextos DVI de identidade, você pode estar usando um nome personalizado. Então está tudo bem. Bem, é claro que a string de conexão diferente é onde você estará dizendo para usar esse banco de dados para esse fim. E então você provavelmente poderia fazer BK que, em seguida, como algo como identidade, conexão de banco de dados e, em seguida, você fornecerá sua própria cadeia de conexão. Então eu estou apenas compartilhando coisas diferentes com você porque você pode estar olhando para todos os projetos e UCI, diferentes contextos DVI para coisas relacionadas ao usuário. E mesmo assim, mesmo quando eles usam o mesmo armazenamento de dados, às vezes personas podem separar os contextos DVI do aplicativo, Esses são os dados irregulares, dados de forma diferente de contextos DVI baseados em identidade. Só estou demonstrando isso aqui. Portanto, contextos DVI do usuário. Portanto, este ainda seria um contexto de banco de dados. Tudo bem, então o outro saberia herdar do contexto do banco de dados de identidade, e não precisaria de nenhum conjunto de banco de dados porque toda a caixa, ele não faz nada além de lidar com coisas baseadas em identidade. Então você pode ver coisas que Isso é Eu estou apenas compartilhando diferentes nuances são coisas diferentes que você pode encontrar à medida cresce e desenvolve mais projetos para que você tenha uma compreensão e apreço por um quando você pode acabar fazendo certas coisas. Tudo bem. Então, fora disso, olhamos para todos os andaimes ou áreas e andamos ou registramos a página. Estendemos o formulário para ter campos adicionais relativos à nossa classe de usuário personalizada. Analisamos o arquivo de registro e as únicas modificações que tivemos que fazer realmente ou apenas para garantir que estamos capturando essas informações adicionais em nosso objeto de usuário antes que o usuário seja criado. Temos que implementar nosso remetente EMEA. Então, como, oh, nós temos esse remetente de e-mail acontecendo. Não, podemos realmente muito bem, podemos deixar tudo o que o código faz é que tudo bem. Então, apenas redirecionamos para a maior confirmação. Não precisamos incomodar nada disso. Mas implementamos nosso remetente de e-mail aqui. No remetente de e-mail o coloca em uma pasta de serviços. Dissemos que nossas configurações de SMTP e no final de semana de inicialização codificaram esses valores. Então, em vez disso, estamos usando o host local, que pode ser facilmente trocado pelo seu servidor SMTP real. Estamos usando a porta e esse é o e-mail do qual tudo está sendo enviado. E para testes, teríamos configurado nosso artigo chamado SMTP. Fora disso, adicionamos nossa identidade padrão. Analisamos a foto que podemos colocar em nossas regras personalizadas como as informações do usuário são validadas no momento do registro. E restrições diferentes, novamente colocadas nesse nível, temos que nos certificar de que adicionamos os armazenamentos Entity Framework. E também observamos que precisamos adicionar páginas do Razor. Se você estiver usando um aplicativo MVC, bem como nos endpoints para páginas do Razor. Tudo bem, então com tudo isso dito e feito, vamos fazer um check-in rápido e sempre nos certificar de que sua mensagem esteja clara o suficiente. E então podemos fazer e afundar. Agora, quando voltarmos, começaremos a analisar mais autenticação e autorização, mas dentro do contexto da identidade. Então, veremos como oferecemos suporte à funcionalidade de login. Esqueci a senha, todos esses recursos maravilhosos. 15. Fundamentos de login — Visão geral da seção: Certo pessoal, então estamos saindo dos calcanhares ou configurando nossa funcionalidade de distribuição. E nesta seção vamos focar na autenticação. Então, isso é configurar o login, analisar a segurança da senha, analisar o Gerenciamento de Sessões ou o gerenciamento de cookies usando identidade. Todas essas coisas maravilhosas que estaremos vendo. Vou examinar mais profundamente as bibliotecas de terceiros que gerenciam usuários sob monitor de login e como podemos implementar a autenticação multifator. Então fique por aqui, vamos nos divertir muito nesta seção. 16. Implemente funcionalidade de login: Tudo bem pessoal, então nesta lição vamos ver a funcionalidade de login. Então, já configuramos ou uma distribuição em coisas e conseguimos criar um usuário em nossos atos de loja, não, na verdade, precisamos fazer o login. Então, antes, não, nós tínhamos realmente implementado o login usando nossa página de login personalizada e nosso código personalizado, que tenho certeza que podemos concordar, não era muito seguro. O que ele fez foi aceitar a entrada do formulário e nós testamos manualmente contra algo que achamos que estaria correto. Queremos estar corretos? Obviamente, em uma situação do mundo real, os usos são armazenados no banco de dados quando chegam ao login, eles vêm para autenticar no up. E precisamos verificar sua existência e a precisão de sua senha no banco de dados. Então, o que vamos fazer para obter um mecanismo de login real é confiar no código de login fornecido pela identidade. Assim, podemos clicar com o botão direito do mouse em um Cones semelhante ao que fizemos com nossa página de registro e podemos ir para o novo item desfiado. Então saltamos para a identidade, identidade sexual. E depois de terminar o processamento e obtermos essa caixa de diálogo, selecionaremos a página de login. Então, temos login e logo, então vou selecionar os dois neste momento. Tudo bem, então, uma vez que eu fizer isso, sabemos que selecionamos nossos contextos de dados e, em seguida, pressionamos Adicionar. Tudo bem, então estou encontrando esse erro. Você pode não encontrá-lo. Mas se você estiver encontrando isso, então vamos trabalhar juntos. Não, acho que esse erro está surgindo devido à possível lacuna de controle de versão que eu teria mencionado anteriormente. Então, vou cancelar isso. E podemos pular para o gerenciador de pacotes NuGet para esse projeto web. E se dermos uma boa olhada, tenho certeza de que elas serão algumas atualizações aqui. Esse é o nosso pendente. Tudo bem. Então o problema é que quando o controle de versão estiver desalinhado entre alguns dos pacotes, resto estará fora de alinhamento. Se não me engano, pelo menos um deles é lá vamos nós. Então este foi atualizado. Eu não fiz isso pessoalmente. Às vezes isso acontece. Eu não sei. Assim como ele é instalado depois do fato, mas mesmo assim, é assim que vamos resolvê-lo. Então, vou selecionar todos os pacotes e deixar todos eles atualizarem. E o que eu realmente poderia ter feito foi bom para toda a solução para garantir que todos os projetos estejam na mesma página. Então, um pouco fora do tópico nulo, mas podemos realmente clicar com o botão direito do mouse na solução gerenciada e obter pacotes para a solução. E isso nos permite examinar os projetos individuais e as versões que eles estão usando. Então, quando obtivermos a lista de pacotes e clicarmos em qualquer um desses pacotes, verá os dois projetos ou tantos projetos quanto você tiver. E se estiver em um e não no outro, você verá que ele não está instalado. No entanto, para que a luz se torne diferente, somos um núcleo está em ambos, mas um está vendo cinco pontos 10. Um deles é dizer que 5.11 é de um modo geral, é bom ter tudo nos mesmos níveis. Então, vou apenas seguir em frente e clicar neles um por um e me certificar de que eles estão todos na mesma versão. Agora, é fácil fazer isso também é ir para o arquivo CS Bridge. E eu posso mudar isso para 11. Então eu sei que vivemos é o que eles precisam ser. Basta passar por todos eles ou você poderia ter feito o gerenciador de pacotes NuGet. E embora existam tantas maneiras, mas depois de fazer uma compilação e ela tiver sido relatada com sucesso do que você sabe, você está no caminho certo. Então, depois de tudo isso, vamos tentar isso novamente. Então, uma identidade de item eliminada do Koen News. Vá em frente e selecione nossas novas páginas e nosso contexto DV e adicione. E quando tudo isso for feito, agora temos nossas novas páginas para fins de login e logout. Então, vamos dar uma olhada na página de login e todo o dinheiro ou página de login que criamos realmente parece muito semelhante à página de login em andaimes. Exceto que você notará que mais alguns serviços estão sendo injetados, em termos de gerente de usuários, no gerenciador de login, vimos essas duas bibliotecas na página de registro. E você notará que há poucas outras coisas aqui que não incluímos. Em última análise, temos o mesmo modelo de entrada que usa o endereço de e-mail e a senha. E então isso pode ser modificado se você quiser ter como um login de nome de usuário e senha, então você obviamente pede que o nome de usuário é o do e-mail, para que você possa modificá-lo, se desejar. Caso contrário, temos o En-Gedi, que basicamente quer saber que há uma mensagem de erro que devo exibir? Não. Certo, tudo bem. O URL de retorno é e, em seguida, faz provisões para as bibliotecas de login externas ou serviços de login que podem ter sido incluídos. Esse é o Facebook e o Google, etc. Então, não estamos passando por isso ainda, mas para nos preocupar com isso. No entanto, no post, aqui é onde mais coisas a magia realmente acontece. Então, no post, estamos fazendo algo como ok, sabemos sobre um URL de retorno e os logins externos, tudo bem. Se o estado do modelo for válido e validade mais uma vez, é baseado nesses atributos são anotações em vez do modelo teria. Se tudo for válido, usamos o Gerenciador de login. Não aviso prévio Eu não estou fazendo um banco de dados chamado que nem está fazendo um banco de dados chamado art, nem explicitamente porque o gerenciador de login está cheio de métodos em um deles é o login de senha assíncrono. Portanto, esse método por si só vai para o endereço de e-mail e a senha que foi fornecida. Ele vai verificar o banco de dados na tabela de usuários do ASP NET. Posso encontrar um registro correspondente? Sim, eu posso. Certo. Não. Armados com a flor para lembrar de mim ou não, vamos criar o biscoito, certo? E, na verdade, assinou a pessoa. Então, essa linha basicamente vai fazer tudo isso e defender a original. Tudo isso criando a reivindicação, configurando o usuário da entidade, o principal e, em seguida, fazendo login. Tudo isso é capturado e executado praticamente nesta linha. Tudo bem? É claro que isso pode ser estendido se você tiver mais reivindicações ou mais coisas que você deseja adicionar ao usuário. Mas, em última análise, você geralmente fora da caixa, Candace, usa o código como está, certo? Não. Então, depois de tentar criar o cookie e tentar atender todo o princípio e assinar os contextos HTTP, Ele retornará se foi bem sucedido ou não. Portanto, se foi bem-sucedido, sim, entraremos no registrador, que será configurado mais tarde para que esse usuário tenha sido conectado. E depois redirecionamos. Se exigir autenticação de dois fatores, há uma página que vem com identidade que nos permite facilitar, para FA se eles estiverem bloqueados, certo? Então octo significa que podemos realmente rastrear para ver que alguém tem muitas tentativas de login ou alguém violou alguma regra de negócios e eles não conseguem acessar o sistema no momento. Podemos definir essa bandeira, então, se eles estiverem trancados, então nós os redirecionamos para a praia que os viu saber que estão trancados, disse. Caso contrário, apenas mostramos um erro que você pode personalizar até certo ponto. Não queremos dar muita informação porque se a senha estiver incorreta por causa do argumento, você não quer dar a eles algo específico o suficiente para saber toda a sua postura. Foi errado, todo o seu nome de usuário estava errado porque então você estaria dando a um atacante pelo menos 50% da equação aqui, eles saberiam exatamente o que está errado. Portanto, esta é uma mensagem muito genérica para ver uma tentativa de login inválida. Mais uma vez, você pode tratar essas balas com bom gosto e segurança. E, em última análise, retornamos a página. Então, se você chegar até aqui, isso significa que algo falhou aqui porque se fosse válido, teria redirecionado. E observe diretamente com baixas calorias porque você não quer redirecionar nosso redirecionamento de risco para um site externo. Então, fomos redirecionamento local para o URL de retorno. Isso é outro se sente seguro contra possíveis ataques de redirecionamento. Agora podemos testar este antigo era que eu queria fazer é pular para o compartilhado e ir para o login parcial. E vamos modificar o URL do login para que seu URL não se pareça mais com o Registro 1. Em vez disso, verei em um registro que ele vai ver um login. E em vez de se registrar mais uma vez, ele vai dizer login. Tudo bem, então agora vamos fazer login na conta. E da mesma forma para os logotipos, podemos simplesmente lê-los na página do logotipo. Então, vamos dar um giro. E quando chego à página de login e tento fazer login com meus já existentes, estou recebendo tentativas de login inválidas. Não, isso não é um erro muito óbvio e precisamos caminhar, percorrer este. Deixe-me explicar exatamente por que este está acontecendo. Então, a maneira como o gerente de login, deixe-me pular para o login. A maneira como o gerenciador de login ou esse método funciona é que ele usa um nome de usuário e uma senha. Então, muitas vezes em que chegamos a este ponto, podemos nos misturar com a admiração, por que não está funcionando? Sou uma saída para a coisa certa. Porque, por padrão, lembre-se de que a página de registro estava recebendo o endereço de e-mail, a senha e a confirmação. Em seguida, use esse valor de endereço de e-mail como o endereço de e-mail e os valores de nome de usuário. Então esse é o resultado do comportamento da caixa. Como resultado, quando ele foi armazenado no banco de dados, você não vê em E-mail e nome de usuário sendo o mesmo valor porque era o mesmo endereço de e-mail que foi tirado e usado para ambos. Desde que entramos, no entanto, colocamos um campo de nome de usuário. Então, estamos tirando nome de usuário diferente do e-mail. Isso significa que quando o método de login com senha ac está sendo chamado, como vemos aqui, ele está passando o endereço de e-mail que colocamos no que está verificando isso no campo de nome de usuário. Tudo bem, então é por isso que estamos pegando nossos pés e isso não é completamente óbvio. Então, estou apenas apontando o dedo do pé porque ele me pegou algumas vezes. Então, espero que isso ajude alguém lá fora. Então, o que vamos ter que fazer, mais uma vez, temos que nos basear em como queremos que nossos usuários possam fazer login. E é aqui que a personalização nas regras de negócios determinará quais extensões você provavelmente colocou em vez de como você escreve sua lógica completamente. Então, se você quiser esse modelo de autenticação de e-mail, então você pode deixar o e-mail como nome de usuário e senha. Caso contrário, talvez seja necessário usar o e-mail para descobrir se há um registro de usuário. Se houver, você encontrará o nome de usuário nesse registro. Eles forneceriam o e-mail, mas você encontra o nome de usuário para fazer uso desse método. Ou, no nosso caso, tudo o que podemos fazer é mudar o modelo de entrada de querer um e-mail para apenas pedir o nome de usuário para que eu possa ver o nome de usuário. E não quero que seja um campo de endereço de e-mail, certo? Então, hum, esta refatoração deste campo de endereço de e-mail e a edição em qualquer outro lugar. Então, estamos pedindo ao usuário o nome de usuário e a senha, o endereço de e-mail e a senha. Então, no formulário em si, é claro, depois de atualizar as referências. Tudo bem, lá vamos nós. Então, agora que fizemos isso, podemos tentar esse login novamente. Então agora estou pedindo nome de usuário e senha. E quando clico em Login, vemos aqui que estamos logados e recebemos nossa tela de boas-vindas. Tudo bem, então funciona da mesma forma que o gerente de login faz tudo por nós. Ele coloca as reivindicações e tudo mais. Então você vê aqui, estamos vendo esse nome de usuário. Tudo bem? Não, o botão do logotipo vai navegar até a página do logotipo, que nos pede para clicar aqui para fazer login. Então, vou inspecionar esse elemento e arte bem, desculpe, em vez de inspecionar o elemento como pular para a página. Então, na página do logotipo, o que ele vai ter é uma fazenda. Isso é basicamente diz objetivo aqui. E faça uma postagem nessa área com o URL de retorno da página. Claro que é uma postagem e o que diz clique aqui para fazer login. Então, em outras palavras, tenho certeza que você não gostaria de dizer necessariamente ao nosso usuário, vá para a página do logotipo e clique aqui para fazer login. Se eles clicarem no logotipo, você quer bloqueá-los? Então, o que podemos fazer é, em vez de tomar toda essa abordagem de navegar para a página do logotipo, eu posso pegar este formulário emprestado, voltar ao meu login parcial e, em seguida, usar este formulário em vez do elemento de navegação para o logotipo página. Então, este botão, agora vamos ver logotipos. Então, quando eles clicarem nesse botão, serão realmente enviadas as solicitações para o logotipo. Então, vou remover a etiqueta âncora que eu tinha inicialmente. E, de um modo geral, você verá esse tipo de configuração de formulário. Então, na própria página do logotipo, você tem o En-Gedi que diminui o tom. Claro, mas isso é o que acontece quando clicamos em Logout. Então, o gerente de login, ironicamente, atribui alt, certo? Portanto, o gerenciador de login é a biblioteca e cenotes assíncrono é o método que saberá, ok, esta é a chave local morta pelo usuário logado, mata tudo e mata sua sessão no site. Então é semelhante ou faz basicamente o que fizemos manualmente aqui. Tudo bem. Então é isso que a ação Legos vem empresas para nós. Vou voltar ao nosso aplicativo. E desta vez, quando clico em logout, na verdade, apenas logotipos e nos informará que fizemos logout com sucesso. Então, na verdade, nem precisamos desse pH do logotipo, porque lembre-se de que esses arquivos de identidade estão realmente lá, é apenas que quando queremos substituí-los, podemos encaixá-los e interagir com eles como gostaríamos fizeram para o login e para o registro. Agora, depois de remover o arquivo de logotipo, se saltarmos de volta para o nosso login parcial, podemos adaptar isso para parecer um pouco mais com o que poderíamos esperar, como nós scafdobramos todas as coisas de identidade da criação do projeto. Então, de um modo geral, você teria visto a injeção do gerente de login em relação à classe de usuário governante, certo? E sim, você acabou de injetar assim nos controladores ou na página que vimos fazer injeção de dependência. Isso é injetado exclusivamente em uma vista. E então esta instrução if, em vez de dizer a identidade user.name autenticada e no Gerenciador está lixando o usuário. E então seria preciso que todo o objeto de reivindicações ou o objeto principal do usuário, certo? A linha vermelha está lá porque precisamos fazer algumas importações de visualização. E essa visualização importa o arquivo é uma boa maneira global usar declarações em suas visualizações e parciais. Portanto, colocando usando a identidade de pontos do Microsoft dot ASP NET Core no arquivo de entradas de exibição. Em qualquer lugar que você precise ter essa areia no Gerenciador, o Gerenciador de usuários injetado. Isso pode ser feito sem mãe, certo? Então, se for para fazer login parcial, vemos, ok, agora temos o usuário fora. Assim, podemos repetir esse processo para o usuário onde voltamos para Exibir entradas e, desta vez, estamos adicionando a instrução using para o namespace onde nosso arquivo de usuário está localizado, e isso é uma entidade e está no projeto de dados classifies. Então, uma vez que você fizer isso, veremos que o usuário não está mais dando um erro e eu posso construir com sucesso. Agora é isso para espera, a funcionalidade básica de login funciona. Quando voltarmos, analisaremos segurança adicional e verificações e saldos que podemos colocar em nosso próprio processo todo. 17. Gerencie o fluxo de Logout: Tudo bem pessoal, este é um vídeo muito simples e trata-se apenas de lidar com o que acontece depois do logotipo. Então, vimos que o registro na Índia só faria isso. Nós clicamos em Logout vai realmente ir para a nossa página de logotipo. Não queremos necessariamente apenas sentar na página. O usuário provavelmente não tem interesse em ver uma barba, vendo que eu adoro nota. Você provavelmente gostaria de navegá-los de volta para a página inicial. Nesse ponto, você provavelmente gostaria de ir em frente e rasgar a página do logotipo. Então deixe-me fazer isso rapidamente. Idades. Você esfregou o item, identidade, encontra logotipos e escolhe ou contextos e, em seguida, adiciona saber quando esse excedente de pH pop, basta rolar para baixo até o que está acontecendo no post on. Então, nas postagens, enviamos todo o usuário e, em seguida, verificamos se virar sua terra. Se houver um, redirecionamos para esse URL de retorno. Caso contrário, lemos Erich para a página. Então, continuamos vendo a página em vez de ir para outra página cred. Então, obviamente, isso está voltando como não-não. Se eu pular para login parcial, nós realmente vemos na forma que tínhamos montado, lembre-se de que tínhamos convertido esse logotipo comprado em uma fazenda. E ele está apenas enviando para esse método OnPause. Ele está enviando por URL de retorno, que deve ser a página inicial. Tão peculiarmente, isso não está voltando, mas tudo bem. O que vou fazer é trabalhar com a nossa própria. Então lembre-se de que estamos controlando o fluxo de qualquer maneira. Portanto, não está se comportando Hall, queremos que o que eu vou fazer é apenas mudar tudo no que acontece depois dos logotipos. Então, em vez de depender de um URL de retorno que sabemos que é suposto ser a página inicial. De qualquer forma. Vou dizer que retorne o redirecionamento local e, em seguida, apontei para o que eu sei é minha URL inicial, que a partir deste ponto seria til e depois barra. Certo. Agora que eu fiz isso, vamos testá-lo e ver o que acontece. Então, estou aqui e estou logado. Deixe-me ver o que acontece quando clico em logotipos. Quando eu logotipos, você vê que estou na página inicial e não tenho mais permissão para o direito. Então, vamos tentar isso novamente. Vou fazer login e depois fui para a página de anúncios e depois vou sair. Então isso significa que depois que um logotipo deve saber, veja o que está na página inicial. E lá vamos nós. Então é assim que você controla esse fluxo de lava. 18. Implemente funcionalidade de redefinição de senha: Tudo bem pessoal, então estamos de volta e vamos olhar para a funcionalidade de senha esquecida neste momento. Então lembre-se de que quando normalmente alguém tenta fazer login e talvez depois de falhar algumas vezes, eles ficarão frustrados e então eles vão querer até agora ser fomentado ou redefinir sua senha, certo? Claro, o verbiage aqui, você pode mudá-lo. Você pode modificar a página de login da maneira que quiser. Mas se eu clicar em Esqueci a senha, observe que ela navegará até uma página chamada Esqueci a senha. Não estivemos em uma página desse tipo. Mas lembre-se de que todas as páginas de identidade realmente permanecendo no botão cresceram se quisermos modificar o fim de semana, sempre desgastou e sobrecarga como desejamos. Mas vamos dar uma olhada no que acontece fora da caixa. Então esqueci sua senha. Por favor, insira seu e-mail. Vou usar o mesmo administrador de endereço de e-mail em tes.com e, em seguida, redefinir a senha. E tudo. O procedimento típico para uma redefinição de senha será que ele enviará um e-mail para o endereço de e-mail que você forneceu. Portanto, se você abrir seu servidor SMTP capturado em papel, ou pelo menos o cliente SMTP , verá que recebemos esse e-mail de redefinição de senha do nosso sistema. Então, se clicarmos aqui, ele navegará para outra página que diz Redefinir senha com esse código Tolkien. Este código, parece muito parecido com quando tivemos que confirmar os ossos oráculo. E então poderemos colocar o e-mail, colocar nossa senha e, em seguida, clicar em redefinir. E então ele dirá, ok, foi redefinido. Clique aqui para fazer login. Em que ponto eu deveria poder fazer login usando a mesma senha que eu tenho usado ou a mesma postura que acabei de usar. E me perdoe, esqueci nosso uso de nome de usuário e não e-mail. Então, vamos tentar isso novamente. Devemos ser bons para ir. E lá estamos nós. Tudo bem, então é basicamente com isso que recebemos fora da caixa, esqueci sua senha. Nada muito extravagante, mas o que vamos fazer é ir em frente e arrancá-lo para que possamos pelo menos ver o que está acontecendo nos bastidores. Então, conhecemos o procedimento, nova identidade do item desgastado. E depois de terminar a construção, seguimos em frente e selecionamos o que você quer. Então, eu quero esquecer a confirmação da senha. Também quero Esqueci a senha e redefinir a senha. Tudo bem, essas são as três páginas envolvidas nesse fluxo de trabalho. Só saiba. Então, e eu faço tudo isso. Ela era um contexto. Então eu posso ver minhas novas páginas aparecerem. Então, vamos ver o que a senha esquecida faz primeiro. Portanto, ele recebe o remetente do e-mail por padrão. Então, como temos essa implementação, não precisávamos nem vir aqui e fazer mais nada. Ele só sabe o que fazer com o sistema está configurado. Então, em qualquer lugar que você precise desse remetente de e-mail, você só precisará injetado de acordo. Então, o que ele faz no post, e este sou eu vendo que a ESI queria redefinir minha senha e clicar nestas Reset, ele verá, verificará se esse usuário existe no sistema. Então, estamos encontrando por e-mail se o usuário for nulo ou se o usuário ainda não confirmou seu e-mail, então vamos ler as diretrizes para esquecer a confirmação da senha. Tudo bem. Então, isso é basicamente fazer isso porque não quer dar a você uma pista de que, você sabe, sabemos que você provavelmente está na tendência do sistema porque pode ser que você erroneamente coloque em seu próprio e-mail. Mas isso significa que não o encontramos no sistema ou você está tentando esquecer sua senha, mas você não confirmou. Ainda vamos dar a você uma impressão de que há esperança para você. Então, se o cenário estiver correto, realmente não há esperança, mas esse redirecionamento sugere esperança. Então, neste momento, você poderia tomar uma decisão. Você provavelmente poderia dar feedback háptico para ver se você está tentando esquecer sua senha e ainda não está confirmado. Por favor, vá e confirme o e-mail DCG e confirme. Então esses o usuário sabe que Oh, sinto muito, perdi um passo e é por isso que não consigo entrar no sistema. Então, isso depende de você. Mas esse é apenas o comportamento padrão. Mais adiante, porém, ele continua a seguir em frente e gerar o código. Então isso acontece quando telefonamos para o usuário e o sistema. Estamos gerando o código. Então você verá que é muito parecido com o que acontece nesse registro. Bits de confirmação, certo? Então, ele gerou o código em alterável. Olhe para a principal diferença aqui. Ganhou o URL para isso é Confirmar e-mail, enquanto o URL é para redefinir senha. E outra coisa é que o Tolkien que ele gera é redefinir a senha Tolkien. Enquanto no registro é gerar um token de confirmação de e-mail. Realmente apontando que um ou dois porque eu distraidamente no passado são ignorância dura. Copiou o código de um e colocando o outro e não pôde. Passei uma hora tentando descobrir por que esse código token não seria. Deixe-me prosseguir no sistema. Isso porque eles são dois mecanismos diferentes através de diferentes mecanismos de hash são usados. Então eu só queria apontar esse dedo no caso, você sabe, você realmente não notou isso antes. Portanto, este é uma confirmação por e-mail e este é redefinição de senha. Tudo bem. Tenho certeza de que existem outros. Se você apenas for para o uso de gerenciar ou controlar o espaço e provavelmente estereotipando Tolkien, então você verá todas as diferentes opções que podem aparecer na cadeia de segurança de senhas, GMail, mutável, número, etc., etc., etc. cetera. Então, com base na situação em que você pode precisar gerar um código Tolkien para confirmação, mais do que provável terá um fora da caixa para você. Tudo bem? Então, depois de gerar essa redefinição de senha, Tolkien, ele vai em frente e gera esse URL mais uma vez para a senha de redefinição. E, em seguida, ele envia essa ferramenta de e-mail, seja qual for o endereço de e-mail no arquivo desse usuário, então ele vai para a tela de confirmação de senha. Então, a confirmação da senha ou esqueceu a confirmação de senha em vez disso, tudo o que faz é que você sabe, que verifique seu e-mail para que você possa modificar isso, torná-lo divertido, torná-lo um pouco mais fácil de usar. Isso depende de você. Mais uma vez, não estamos nos concentrando na estética, estávamos realmente focando no chão de trabalho de todos os nossos bits e peças de autenticação. Em seguida, no Redefinir senha, temos um formulário que solicita seu endereço de e-mail, para que sua senha confirme sua senha e, em seguida, a senha de redefinição após ela ter sido enviada será exibida por e-mail. Se o usuário for nulo, o que significa que não o encontramos. Nós os direcionamos para a tela de confirmação de redefinição de senha. Então, mais uma vez, estamos dando esperança a eles para que você possa sempre descobrir como você quer lidar com isso, certo? Caso contrário, queremos encontrar o registro deles no banco de dados e, em seguida, redefinir suas senhas. É tão fácil usar uma redefinição de ponto do gerente, chefe ou pia. Recebemos o usuário, conhecemos o código do token com base na URL e, em seguida, fornecemos a nova senha. E depois que isso for bem-sucedido, mostramos a página de confirmação. Página de confirmação, é claro, basta navegar até nossas sugestões de que você vá em frente e faça login. Tudo bem? Mais uma vez, você nem precisa brigar isso, a menos que pretenda modificar a forma como eles estão dispostos. E se você quiser modificar o fluxo de trabalho como discutimos para a senha esquecida. Então, é isso mesmo para implementar a funcionalidade de senha esquecida. E para mim, o cerne do assunto é colocar esse serviço de e-mail funcionando e funcionando que está lá. Você nem perceberia que as coisas estão apenas trabalhando mais. Suponha que loja. 19. Implemente bloqueio de conta: Tudo bem pessoal, então estamos continuando nossa jornada pela biblioteca de identidades e tudo o que ela nos oferece. E nesta lição, vamos implementar esse recurso de bloqueio. Agora, esta é uma boa maneira de melhorar a segurança bloqueando um usuário que ele insere é credenciais incentivadas muitas vezes. E na verdade é uma grande colina por ganhos ataques de força bruta. Quando talvez um invasor tenha um nome de usuário ou senha e tenta entrar repetidamente no sistema com várias senhas potencialmente erradas. Então, o que vamos fazer é modificar as opções aqui para sabermos que temos as opções para habilitar a segurança de senha. Se olharmos um pouco mais, podemos adicionar opções ponto Lakota. E então podemos ver se é permitido para novos usuários. Qual é o intervalo de tempo padrão sobre o que é o máximo de tentativas de acesso com falha. Então eu disse que sim, isso permite novos usuários. Eu tenho o intervalo de tempo padrão para ponto de tempo cinco minutos. Obviamente, as regras de negócios determinarão o que você faz e o número máximo de tentativas com falha é três. Então, depois de três tentativas fracassadas, nós as bloqueamos 45 minutos. E não nos importamos se você é um novo usuário não. Então a opção está lá. Mas quando eu for ao login, você verá que o código, nosso próprio cabelo não está elogiando as opções. Então, no método assíncrono de login de senha de ponto do gerenciador, você vê aqui local em caso de falha é por padrão, pelo NO, isso é o que foi gerado, ele definido como false. Então, precisamos mudar isso para verdade para que ele saiba que queremos que você aja de forma estrita. Não, podemos tipo de carne nessa parte para talvez fazer um pouco mais. Tudo bem, então o que queremos fazer quando o usuário for bloqueado informado? Então, neste ponto, se eles fizerem isso três vezes, eles vão, o resultado vai dizer LaCo, essa pessoa, se eles são sacolas bloqueados vai redirecionar para um pH local, que provavelmente vai ver alto, você estão bloqueados. Aguarde alguns momentos. Sempre podemos nos esforçar para que os pacientes vejam o que é, o que exatamente é exibido nele. Mas sem andaimes, o que vamos fazer é injetar nossos remetentes de e-mail. Então, a coisa sobre isso é que você quer seu usuário saiba que ele foi bloqueado. Então, vamos injetar o remetente por e-mail. E a maneira rápida de fazer isso é apenas colocá-lo no construtor, depois usar pontos de controle e, em seguida, deixar que ele crie um campo atribuído e, em seguida, seguir a convenção de nomenclatura. Usaremos apenas o sublinhado para o remetente do e-mail. Lá vamos nós. Então, dentro de fora, o resultado está bloqueado, disse que teremos algum registro CSV que a conta foi bloqueada. Então vou encontrar o usuário. Então, até agora, sempre encontramos a base de usuários no endereço de e-mail. Agora posso encontrar por nome, que leva o nome de usuário que foi inserido, certo? Então, se você passar o mouse sobre o fã pelo nome, verá que eles querem o nome de usuário. Então, quando descobrimos que esse usuário, não conseguimos obter o endereço de e-mail. Portanto, essa etapa é opcional se você optar por rotinear esse e-mail como nome de usuário e endereço de e-mail, se você escolher uma rotina que eles não precisariam fazer essa etapa extra. Mas como estamos fazendo login usando o nome de usuário, neste momento, preciso encontrar o que é isso? Preciso encontrar os registros do usuário. Posso obter o endereço de e-mail para enviar a ferramenta de e-mail. Então eu estou apenas recebendo meu remetente de e-mail, enviando o assunto do e-mail e depois mensagem HML para que o assunto seja bloqueado, uma informação de cone, o que você quiser que esteja sujeito a B. E então meu e-mail diz que você tem foi bloqueado fora da sua conta por tentativas inválidas de dois minutos. Se isso não foi, redefina sua senha, pois isso pode ter sido uma violação. Claro, sua mensagem pode ser tão clara quanto você precisa para que o usuário saiba que isso é o que está acontecendo com seus cones. E então você pode saber redirecionar esse usuário para a senha esquecida ou dinheiro para a página inicial ou para outra página apenas para ver bloqueado, seja lá o que for, você pode determinar isso completo. Então esse é o meu fluxo. Só para te dar uma ideia das possibilidades naquele momento. Agora, o que vou fazer é testar isso. Então, na tela de login, vou apenas açougar a senha que conheço. E enquanto eu estiver fazendo isso, vou pular para o banco de dados e vou procurar a tabela de usuários de amendoim. E então eu vou rolar para a direita, onde você verá Lakota local ativado e acessará cones de campo. Tudo bem, então esse cone deve incrementar com cada tentativa falhada. Portanto, esta é a tentativa número um. Tudo bem? E então, quando eu atualizar esta tabela e depois dar uma olhada, aqueles que você verá aqui que o campo atual subiu por um. Então, vou me sentir mais duas vezes deliberadamente. E vamos ver o que acontece. Então este sou eu sendo redirecionado para a senha esquecida. Se eu voltar ao banco de dados e olhar, não, você vai ver que Maya Cone diz que eu tenho sido lactose. Então, Lakota habilita isso, é verdade? Sim. E eu fui bloqueado porque nenhuma extremidade de bloqueio tem um valor. Então esse valor é basicamente o tempo do não, com base no intervalo de tempo que eu disse, que foi o que, cinco minutos. E então, se verificarmos nosso servidor SMTP ou cliente ou outro, veremos que recebemos o e-mail dizendo que não houve uma violação. É claro que, para isso agora, poderíamos realmente fazer toda a Senha Esqueci, Gerar o link e enviar esse link na senha para que o invasor possa ser redirecionado aqui. E mesmo que eles tentassem colocar o endereço de e-mail novamente e enviar, nesse momento estamos pedindo o endereço de e-mail, mas eles precisam fazer login com um nome de usuário. Então, seja lá o que for, no entanto, a dinâmica que o atacante está parado ali mesmo. Eles não podem prosseguir com nada. Mas então o usuário realmente receberia os e-mails para dizer redefinir senha ou, como eu disse, este original vendo seguir este link para redefinir sua senha. Como colocamos isso? Então, neste momento, eles sempre podem fazer tudo isso e ser capazes de gerenciar seu próprio destino. Então, essas são pequenas ideias. Mais uma vez, só estou mostrando do que o sistema é capaz. A implementação real é relativa às necessidades de sua empresa. 20. Implemente autenticação de dois fatores: Tudo bem, então, nesta lição, estaremos procurando ativar a autenticação de dois fatores. Portanto, a autenticação de dois fatores na maioria dos sistemas, pelo menos que desta vez seja realmente opcional. Alguns casos tornam obrigatório a essa taxa, ou pelo menos fora da caixa, podemos torná-lo opcional para o usuário. E eles podem entrar e pagar sua conta de usuário e ativar ou desativar isso. Portanto, o primeiro passo em nossa aposta neste movimento ou fazer esse movimento é configurar o link para ir para a página Gerenciar para o usuário. Então, o euro original que era apenas um URL vendo bem-vindo. O nome de usuário não terá adaptado para C é identidade de área B ir para SBP, um índice de gerenciamento de propriedade conjunta e o título é quilometragem. Tudo bem. E então a textura significa o mesmo. Então, vamos ver o que recebemos quando fazemos isso. Então, depois de fazer login, podemos sempre clicar no administrador, saber que é um URL e seríamos navegados para o gerenciamento, digamos um painel de gerenciamento para o usuário. Claro, ele pode enviar os discursos e saber o que fazer scuffled, você só precisa olhar na URL para ver quais são os nomes das páginas. Tudo bem, mas quando, quando ele arrancou estes, você pode modificá-los para que eles possam permitir que o usuário seja responsável por seu próprio perfil. Neste ponto, eles podem atualizar seus e-mails, alterar a senha à vontade e habilitar a autenticação de dois fatores. E essa guia realmente permite que eles excluam suas próprias colunas. Tudo bem, então você pode permitir que eles possam fazer tudo isso ou você pode restringi-los conforme você precisa. Agora vamos voltar para a página de autenticação de dois fatores e clicar no aplicativo autenticador sit up. E agora vamos receber as instruções. Então, isso é o que o usuário está vendo fora da caixa. A identidade com a qual trabalharemos com essa autenticação de dois fatores dada pelo Microsoft Authenticator ou pelo Google autenticates estão disponíveis para dispositivos Android e iOS. Agora já tenho os aplicativos no meu celular. Então, se você deseja se aventurar nesta estrada e muito mais longe do que eu sugiro, você vá em frente e pegue qualquer um para o seu telefone. A próxima instrução diria digitalizar o código QR ou inserir essa chave em seu desligado de dois fatores. E então eles navegarão para fazer alguma documentação sobre como fazer o código QR funcionar. Então, na verdade, vamos fazer isso juntos. Portanto, a documentação para mim é bastante simples, temos que colocar essa biblioteca em nosso projeto. Então, se eu clicar nesse link, veremos que vamos baixar essa biblioteca. Então vá em frente e baixe isso. E então, em nosso projeto, podemos pular em direção à raiz. E em nossa pasta, vou criar um novo diretório e chamá-lo de responsabilidade. Claro que pode ser mais específico. E vamos arrastar os dois arquivos JavaScript para a pasta da biblioteca. Então, precisamos do código QR dot js. E se você arrastar o outro é apenas a versão completa do minificado, certo? Então, temos o código QR dot js. Em seguida, vamos pegar esse arquivo JavaScript ou esse código aqui ou ali, e criar um novo arquivo chamado QR ab.js na pasta JS raiz. Então, estou apenas seguindo as instruções como a Microsoft está me dizendo, eu não estou fazendo nada, toda a arte na área aqui, mas estamos fazendo isso juntos. Então, novo item, quero o arquivo JavaScript, que será encontrado na web, um pouco ou em um arquivo JavaScript. E estou nomeando como eles sugeriram, QR ab.js. E depois colamos isso nesse arquivo. Agora, depois de termos feito tudo isso, vamos encontrar a página que está exibindo esse toro, que é o autenticador habilitado, que significa claramente que temos que rasgar essa página. Então não, eu saí para pular para nossos cones, vou adicionar ou você sabe, a rotina já vai para a identidade. E vamos procurar a página, uma barra de dois pontos, autenticador habilitado para barra. E como eu disse, muitas páginas com as quais você pode querer interagir, como 12, talvez eu as carregue para desativá-lo. Se eles puderem ativá-lo, você provavelmente deseja permitir que eles o desativem. E então você provavelmente gostaria de gerenciar nossa alteração do índice com as propriedades de navegação, você sabe, coisas assim, o que quer que você queira fazer. Então, vou apenas ir em frente e incluir esses três. Posso não interagir com todos eles, mas deixe-os escapar-se. Em seguida, obteremos uma nova pasta com todos os novos arquivos. Então, vou pular para o arquivo em questão. E abaixo desta seção de scripts, vamos adicionar os novos caminhos. Então, acabei de copiar isso dos bulks da Microsoft. Deixe-me apenas ter certeza de que meus caminhos. Então esse é o código QR slash lib slash e eu usarei apenas min. E então este é slash js slash QR. Assim, você sempre pode usar o Control Space para obter esse adicional abaixo dele. Então, agora que temos toda essa configuração, deixe-me tentar carregar essa página novamente. E você olharia para isso? E tudo o que temos um código QR sendo exibido. Então, é claro que ele pode modificar a página e remover essa batida porque não precisamos mais disso e gostaríamos de dizer isso ao usuário. Então, na verdade, vou escanear o código QR agora mesmo com meu telefone. Eu gostaria de poder mostrar-lhe isso em ambos. Está acontecendo. Não. E então eu posso colocar o código de verificação como está no meu telefone e verificar. E lá vou eu. Então, agora eu habilitei a autenticação de dois fatores para esse usuário específico. Nossos cones conhecem essas citações de recuperação que você provavelmente sugeriria ao usuário ou, como você vê o aviso, por favor, mantenha-as seguras porque, se o oposto funcionar, você precisa entrar no sistema, você sempre pode usá-las recuperar códigos para acessar. Agora estou, é tudo isso. Se eu olhar no banco de dados e examinar o registro desse usuário, verei que o sinalizador habilitado de dois fatores não está definido como true. Isso significa que quando voltarmos ao código para o processo de login, há algo que acontecerá quando fizermos login com sucesso. Então, isso significa que fizemos login com sucesso. E então isso verá se requer autenticação de dois fatores e, em seguida, redirecionará. Vê isso? Portanto, não, o resultado não voltará. Eu consegui, pelo menos não a primeira vez que ele estável voltará, pois requer autenticação de dois fatores, que os enviará para esta nova página de login. Faça login com dois FA, que não brigamos. Podemos andaime, mas vamos ver o que recebemos da caixa primeiro. Então fui carregar, carregar e tentar fazer login novamente com o mesmo usuário. Clique em login e, em seguida, você vê que não é necessário navegar para o novo login da página com dois FA me pedindo minhas cotações de Autenticador neste momento, eu ou o usuário , como você sabe, o contexto determinará, agora colocar o que está sendo exibido para mim no meu Autenticador. Então, estou colocando meu código e clico em Login e lá estou logado. E, assim, temos a autenticação de dois fatores ativada. Agora, esse processo é relativamente simples para alguém que é experiente em tecnologia. Então você pode pensar sobre a melhor maneira habilitar algo que está em sua organização. Mas o ponto principal da autenticação de dois fatores é algo que você sabe, e algo que você tem, certo? Então, algo que você sabe, seria um nome de usuário e senha padrão, mas então outra pessoa poderia saber o que você sabe. No entanto, a probabilidade de alguém ter o que você tem é ainda mais reduzida porque agora esse dispositivo está mais em sua posição. Claro, seria preciso muito mais esforço para alguém poder acessar a Sarah Colin por causa da disparidade entre os dois pontos de contato. Não é infalível, mas é outro nível de segurança e complexidade para o processo de login que você pode querer considerar ou reconsiderar com base no seu público. Lembre-se sempre de que mais segurança que entra significa reduzir a usabilidade para algumas pessoas. Tudo bem, então às vezes você tem que encontrar esse equilíbrio entre usabilidade e segurança. Com tudo isso dito, quais são suas regras de negócios? Certifique-se de que você está tomando as melhores decisões para você e para seus usuários e pela longevidade e segurança de seu aplicativo. Dito isto, se o usuário voltar aos lances de gerenciamento e clicar na autenticação de dois fatores, ele terá a opção de desativar para FA. E isso redefiniria tudo. E haveria de volta à necessidade de configurar tudo do zero. Então, você sabe, você dá a eles alguma quantidade de poder e eles permitem que eles tenham dinheiro certo caso também. Mais uma vez, encontre esse equilíbrio entre usabilidade e segurança. 21. Revisão da seção: Tudo bem pessoal. Então você atingiu outro marco. Nós olhamos para algumas coisas. Um porão para obter o seu próprio erro de andaimes. Tudo bem. Espero que você não queira encontrar, mas pelo menos passamos por isso para que você saiba o que fazer. Também analisamos andaimes de mais páginas e substituindo nosso próprio código personalizado, especialmente o código de login que foi projetado apenas para esperar ver com o andaime ou o código Alt da placa de caldeiras da caixa que essas coisas muito mais complexas, mas usando as bibliotecas de terceiros que são muito poderosas. Então você vê que a página de login está usando o gerenciador de login e ela tem todas essas outras opções e nós reforçamos algumas delas, como com a sacola de bloqueio, voltei e adicionei mais CO2. É uma pausa de sucesso e replicação se você quiser. Mas eu coloquei o link para as redefinições de senha de uma só vez para que haja navegação, eles serão solicitados a redefinir sua senha por e-mail. Todas essas coisas maravilhosas. Também analisamos andaimes de mais páginas, personalizando-as, analisando o que cada bit de código está fazendo e, mais uma vez, entendendo como podemos modificá-las com base em nossas necessidades reais. Então, o que vou fazer é remover nossas páginas de autenticação originais. Não precisamos mais disso. Essas são coisas do passado. E agora temos código mais robusto e código muito mais seguro lidando com nossas operações. Também analisamos todo o fim de semana estender o pipeline de funcionalidade de identidade. Então, analisamos as opções internas, sim, adicionamos mais para o mecanismo local, mas depois adicionamos validação de senha personalizada e analisamos o arquivo. Podemos adicionar mais funcionalidades personalizadas conforme precisamos. E basicamente o que for que você adiciona como algo fantasia. Então, se você adicionou, talvez me deixe ver o validador. Então, se adicionássemos o papel de validador, ele realmente lhe diria que você precisa. E eu rolou o validador C sempre informará qual interface a classe personalizada que você criará precisa herdar. Então você pode entrar corretamente, lamentado, certo? Então, neste caso, colocamos o validador de senha ou chamo de serviço de dados válido por senha. E está apenas herdando da senha i através dos dados. Sim, se eu rolar o validador, certo, você tem eu, este validador eu, aquilo. Então você tem algumas opções. E com base no seu cenário, você pode usar essa interface, implementar o método e colocar toda a lógica necessária para cumprir suas regras de negócios. Então, com tudo isso dito e feito, o que vamos fazer agora é verificar nosso código. Como de costume, deixamos nossa mensagem o mais clara possível e, em seguida, vamos apenas seguir em frente e confirmar e sincronizar. E vou ficar por aqui. Vamos entrar em mais carne e mais conceitos estão em todo o fim de semana seguro ou aplicativo. 22. Visão geral da seção: Tudo bem pessoal, bem-vindos de volta. Estou muito feliz por você estar aqui. Isso significa que você está comprometido em entender o trabalho de autorização e autenticação da OMS em aplicativos dotnet Core. Agora, até este ponto, já analisamos alguma quantidade de autorização em que olhamos para a foto. Na verdade, você pode simplesmente colocar esse filtro HTTP logo acima de sua página ou sua ação, ou seu controlador, ou até mesmo seus componentes com base em qual tipo de aplicativo dotnet Core ele está usando. E apenas dizendo autorizar, você estará prevendo qualquer corpo que esteja tentando acessar o conteúdo ponto final ou neste local para primeiro autenticar antes que eles possam prosseguir. Então, se quiséssemos, isso está em cada página. Já sabemos que temos essa configuração que podemos colocar na inicialização. Parece um pouco diferente se você estiver usando um aplicativo MVC. Mas é praticamente a mesma coisa em que apenas forçamos esse autor como filtro em cada local em nosso aplicativo. Também analisamos o fato de que, se houver locais específicos que queremos deixar o aberto, não exigindo autenticação, e então precisamos apenas de comportas com a permissão anônima. E isso provavelmente seria menor do que o número de locais que você deseja possuir. Então, para mim, é sempre mais fácil fazê-lo globalmente e depois colocar as exceções. Então, já analisamos essas coisas básicas, então vamos analisá-las na próxima lição. Mas, para toda essa seção, veremos todos os recursos porque você tem a autorização básica, que é o que analisamos e analisamos. Você também tem funções, tem reivindicações, tem políticas. Vamos analisar todas essas coisas e como elas podem se combinar para criar um aplicativo muito seguro com base nas necessidades de sua empresa. Então fique por aqui. Temos muito a explorar nesta seção. 23. Implemente autorização básica: Tudo bem, então estamos de volta e só queremos uma rápida recapitulação da parte da autorização. Então, na revisão, basta saber que analisamos os diferentes sabores que podemos fazer em um aplicativo Razor pages, qual extensão ou aplicativo dotnet Core onde um deles, podemos configurá-lo globalmente. E se não quisermos ficar assim globalmente, sempre podemos ir para a página específica ou o código por trás dessas contas específicas. Portanto, esta é a página de índice das categorias. E posso dizer autor I. Então, neste caso, não autorizei explicitamente. Ele já está definido globalmente portas. Esta é uma categoria, então você gostaria de autorizar isso porque provavelmente quer que isso seja dedicado ao que os administradores do sistema podem fazer em vez de usuários regulares. No entanto. Então, certo, não, ele muda como devido ao filtro global. E se eu quisesse fazê-lo explicitamente, apenas dizemos autor, autores, tudo bem. Mas então, se eu quiser autorizar globalmente e, em seguida, isentar como fizemos para a página de índice dos anúncios. Isso porque eu regularmente os usuários devem poder acessar meus sites classificados e ver a lista de anúncios sem precisar autenticar. Talvez se eles quiserem criar um, então eu gostaria que eles se autenticassem naquele momento, eu não permito anônimo. Então você tem que autenticar, assinar cone interior, então você pode criar para que eu saiba quem você é, certo? Então, esses são os tipos de decisões que você precisa tomar. Mas, além de tudo isso, porque nós meio que olhamos para tudo isso no nível básico já. Quero mostrar alguns exemplos de aplicativos MVC e blazer ups que construí no passado. Então eu mencionei que pode parecer um pouco diferente porque o MVC usa visualizações, controladores e modelos. Portanto, os posicionamentos desses blocos de autorização estariam no controlador. E é um pouco diferente da página porque a página sim, tem no Git e tem no post e você tem o que você chama de manipuladores. Mas todos eles são relativos à página. Portanto, não é como se eu pudesse autorizar o En-Gedi. Tentei criar como em chega aqui. E, em seguida, não autorize outro manipulador. Ou está autorizando a página inteira ou não estou. Então, se eu tentar oferecer como apenas o manipulador que você vê aqui vai sinalizá-lo e dizer: Bem, isso não pode ser aplicado ao manipulador. Ele tem que ser aplicado globalmente. Então, você tem acesso à página e às centenas na página ou seus ossos. Então isso é tudo o MVC desculpe. São todas as páginas do Razor com um identificador, esse é um cenário de autorizações. No entanto, aqui está um exemplo de um aplicativo MVC que eu fiz e realmente fiz isso no meu curso, complete o ASP.net Core e desenvolvimento em diferentes desenvolvimentos de palavras, certo? Então, nesse caso, fazemos bem através da autorização não tão aprofundado quanto estamos fazendo isso neste curso. Mas você verá aqui que este é um controlador e um controlador tem ações diferentes, certo? Então, cada oxigênio teria uma visão. Só estou passando por isso caso você não esteja muito familiarizado com o MVC. Portanto, cada controlador teria uma ação e a ação tem uma exibição correspondente. Então, se você olhar na pasta de visualizações, você sempre vai encontrar, ou você sempre deve encontrar uma pasta com o mesmo nome de um controlador. Então este é o controlador doméstico. Aqui está uma pasta inicial na pasta views. Em seguida, a ação de índice, há essa visualização de índice que acompanha esse axônio. Isso significa que um controlador tem acesso a várias páginas por vez. Posso optar por autorizar todas as páginas que podem estar associadas a esse controlador. que significa que apenas por mim dizendo autor, pois você precisa fazer login para acessar a página de índice, a página de privacidade e, provavelmente, até mesmo a página de seta, certo? Qualquer página que seja qualquer ação que esteja aqui que tenha uma página ou uma visualização associada a ela é automaticamente autorizada por eu fazer isso. Agora, se eu quisesse não autorizar todo o controle sobre autorizar talvez apenas uma visão específica, então eu posso simplesmente colocar essa inundação diretamente acima dessa ação. Isso significa que nenhum índice requer autenticação. Que privacidade e erro não. É basicamente assim que funciona em um aplicativo MVC. Então, mesmo que eu dissesse permitir anônimo, todo esse controlador, então esse autor, como com sobrescrever seu baixo anônimo para essa ação em particular, certo? Então, sempre que vamos para o índice, você precisa se autenticar. Mas por causa do baixo anônimo uniformemente, havia um autor global como filtro. Então. Isso permitiria que o controlador doméstico permitisse que usuários anônimos pudessem acessá-lo. Então, isso é basicamente o que parece em um aplicativo MVC. Não sei se, você sabe o que preferir, seja qual for o modelo que você preferir, ambos são praticamente a mesma coisa. Você só precisa apreciar as nuances para poder operar corretamente? Não, o próximo exemplo. Vem na forma do meu blazer. Então eu faço este. Esta é uma API de livraria onde faço isso na minha velocidade em um curso principal de API e blazer. Então, nesse curso, passamos pelo desenvolvimento de API. Claro. E, mas você percebe que nosso desenvolvimento de API é 12, assim como o MVC onde você tem seus controladores e você pode sinalizar autorizado diretamente acima desses endpoints de API, certo ou acima de todo o controlador, ou acima disso comportamento ou ação, assim como eu descrevi nos aplicativos MVC regulares para que você possa executar um paralelo entre uma API e um aplicativo MVC sobre como você lida com a autorização. Mas então, em termos de blazer, quando você está nos componentes não, estou nesse componente que carrega os autores. Dentro desse componente, posso colocá-lo em um atributos na parte superior do componente que diz autor. E então isso, e isso é o que eu estava dizendo. Parece basicamente o mesmo em todo o aplicativo dotnet Core. Então, vamos ver algumas nuances. Então aqui eu realmente estaria vendo isso dentro do próprio componente. E o componente é praticamente híbrido de sim, marcação HTML ou RAs, Marco, brother e C-sharp. Isso é praticamente o que nosso componente se parece. Então, no caso de você, você não está necessariamente familiarizado com isso. Isso é o que ele traz para a mesa. Então, aqui, posso ver que quero autorizar esses componentes, ou seja, se você tentar navegar até ele, você tem que fazer login. Outra coisa legal, um blazer de barcos e algo assim está disponível nos aplicativos dotnet Core à medida que eu levanto na NBC. Isso é que podemos Quem é a visão autorizada? Então, aqui estou vendo a visualização autorizada e estou especificando que, se a pessoa for do administrador da função, poderá ver isso. Isso é praticamente tudo isso. Faz. Fazemos algo semelhante ao da página de login, não na página de login no componente parcial de login. Em nossas páginas do Razor para cima, dizemos apenas exibir certas coisas se a pessoa estiver logada ou se soubermos que podemos estender isso. Podemos sempre dizer que se a pessoa está em nosso papel ou algo assim, podemos fazer essas coisas extravagantes aqui. Então, estou apenas mostrando que toda a autorização é uma espécie de, ela difere de muito minutos entre os diferentes modelos de aplicativos dotnet. Em última análise, porém, uma vez que você aprecia o pensamento de que, uma vez que você coloca autorizar ou colocar esse filtro global, então tudo precisa ser autorizado. Então você já está em seu trigo com a autorização permanente. Agora, o que queremos fazer é dar um passo adiante. Então você veria aqui que isso está especificando o que chamaremos de rolo, certo? Está dizendo que papéis são iguais a administrador. Eu posso trazer minha gestão de licença e posso mostrar a você para o in, qual deles é ele na alocação de licença. Ele está autorizando automaticamente somente regras para o administrador. Tudo bem, então há momentos em que você não pode especificar que eu quero autorizar apenas essa função para o controle ou essas ações, ou no nosso caso, essas páginas. Portanto, no nosso caso, queremos garantir que apenas os administradores possam criar categorias são categorias de interruptores. Mas, então, qualquer um usuário regular deve ser capaz de interagir com anúncios. Então essa é nossa próxima missão. Então, quando voltarmos, entenderemos como as regras eram o carvão. Adicionamos funções aos usuários e como usamos isso para impor o que eles podem ou não fazer. 24. Adicione papéis aos usuários: Tudo bem pessoal, então não para discutir papéis sobre como podemos implementar linhas em nosso aplicativo em profano sobe, isso nos ajuda. Portanto, nosso papel é basicamente como uma permissão. Como qual é a sua estrada na sua empresa? Você é um chefe, você é um trabalhador , etc., com base em seu papel, você pode fazer certas coisas, você faz como certos privilégios, etc. Então, assim como na vida real, queremos replicar esse tipo de rigor em nossa aplicação. Quando falamos sobre regras ascendentes para os usuários e garantir que eles não possam fazer certas coisas. Então, a maneira mais fácil de entrar diretamente no sistema realmente é semear. É porque, de um modo geral, quando você começa a criar um aplicativo, você tem a previsão de saber que essas são as regras que podem ser usadas? Sim, mais tarde, ele pode procurar gerenciá-los por meio de nossa interface de usuário. Balas, certo? Sem fraude para ficar legal, vamos tentar colocá-los no banco de dados usando o Entity Framework e como eles são propagando ou ED. Portanto, dentro da configuração já temos dois gases de configuração onde fizemos semeadura. Então, vou replicar esse tipo de construção com as regras, e então vou adicionar uma nova classe. Vou chamar a configuração de semente de funções. Eu só vou criar a configuração porque isso é tudo o que eu realmente vou usá-la para fazer. E vou permitir que ele herde da configuração do tipo de entidade I da função de identidade. Tudo bem, então você pode precisar adicionar algumas instruções usando depois disso, mas precisamos implementar essa interface. Portanto, observe que estamos usando a regra de identidade já analisou a foto sobre identidade de usuário da entidade, Rhode, etc. Se você optar por substituir isso como em, você está usando seu próprio tipo de função como em geral o tipo de usuário, então você sempre poderá substituir o rolo de identidade por qualquer tipo de função criado após o fato. Então nulo dentro do construtor, terei duas funções, cliente e administrador e tudo mais. Você está olhando o código que está na minha tela e provavelmente se perguntando qual tópico. Tudo bem. Deixe-me explicar toda a rede acontecendo aqui. Então, já temos o modelo de como fazemos o CD ou, como dizemos, um ponto do construtor tem dados e novo objeto e, em seguida, preenchemos as peças. Então, aqui criamos a nova regra de identidade de dados de seus dados. Tudo bem? E então preenchemos todos os campos são pelo menos os campos que consideramos absolutamente necessários. Então você tem um sistema simultâneo tem outro campo, mas eu realmente não preciso desse nessa situação. Então, regra de identidade, ID é igual a, acabei de ligar bem porque eles usam void como chave primária nas tabelas de identidade, certo? Então você pode simplesmente ir e encontrar um bem e usar isso. E eu literalmente só mudei alguns personagens no mesmo bem para que você possa replicá-lo. É assim que você pode usar seu próprio bem, tudo bem. É uma mesa em branco, então você tem o luxo de colocar o que você quer. Além disso, essa tabela não muda necessariamente muito, então a probabilidade de falhar mais tarde é bastante reduzida. Então eu tenho isso. E, em seguida, no nome, normalmente quero dizer que o nome é uma string. Você teria uma corda. Talvez você diga cliente. Uma vez que eu não quero fazer é escrever toda essa luz de corda estática, essa é a nossa corda mágica. Então, para reduzir isso, o que eu fiz foi criar outra pasta chamada constantes. Nessas constantes cheias de um arquivo chamado regra e depois rolam. Esse cara só tem constantes, cordas. Então, quantas regras você quiser apenas ter nomes correspondentes e o valor real diz desse fluxo mágico uma vez. Tudo bem, depois você apenas para referência, é assim que o nome é igual ao cliente rho dot, que retornará o nome normalizado do cliente da string estática. Basicamente, é a versão em maiúscula ativada, fora qualquer nome como vimos com o nome de usuário e o nome de usuário ou e-mail normalizado e normalize o e-mail na tabela de usuários do ASP NET. Então nome normalizado aqui, nós apenas vemos, Dê-me sobre o cliente, mas coloque-o em maiúsculas. Isso é muito mais limpo, eu acho, certo? E depois, fazemos a mesma coisa para os administradores. Quantas regras você precisar, você pode replicar essas etapas. Agora, o próximo passo é fazer RMI acinzentado. Então você precisa lembrar que precisamos atualizar nossos contextos DVI de aplicativos para informá-lo que ele deve saber como essa semente minha configuração em null. Você pode ter várias configurações de semente daqui para frente porque você pode querer ver o usuário. Você pode querer semear a fonte que esse usuário está associado a essa regra e você pode acabar com muitos arquivos de configuração. Então, o que vou fazer é reduzir as linhas individuais e substituí-las por esta. Modelbuilder dot aplica configurações do tipo de aplicativo de montagem, contextos DVI ou qualquer que seja o seu contexto e mira de banco de dados, não para montagem. Então isso é realmente espanhol, citar sem aspas quatro. Procure no assembly atual em que o contexto de banco de dados está e obtenha todos os arquivos de configuração associados. Isso é praticamente tudo o que está fazendo. Tudo bem, então automaticamente basta digitalizar e descobrir que tudo aqui está um arquivo de configuração que está associado a uma entidade que eu conheço , etc. E com essa única linha, você aplica automaticamente todos esses arquivos de configuração. Então, deixe-nos saber, execute nossas migrações. Vou adicionar a migração de sementes rurais, que, como esperado, nos fornece esse arquivo de migração informando que pode ser usado para inserir valores em nossa tabela de funções de rede SBI. Tudo bem, então este é o nosso ID que será colocado e, em seguida, ele fez automaticamente o sistema simultâneo e o nome Ministério Peter e cliente. Tudo bem. Então, com isso feito, podemos fazer uma atualização. E não, atualizamos o sistema com sucesso. Agora, neste momento, você provavelmente quer ter um administrador no sistema separado dos usuários ou qualquer pessoa que se registre normalmente deve ser um usuário de rúcula, nosso cliente outro e, em seguida, controlamos os administradores. Portanto, com base em suas regras de negócios e sua estratégia, você pode ter que empregar diferentes maneiras de fazer isso. Então, de um modo geral, você gostaria de ter um administrador do sistema. Então, já temos alguns usuários que já nomeamos admin. E vou mostrar exatamente como você pode associá-los à nossa função no banco de dados diretamente. Então esse é um tipo de Manuel e depois veremos como o cliente de semente de fim de semana. E depois, por extensão, analisamos como podemos definir a regra assim que a pessoa se registrar. Então, vamos começar com a tabela ISBN que usuários. E vamos analisar o ID das linhas. Portanto, regras ASP NET e usuários da rede SBI. Então, analisaremos os dados de ambas as tabelas. Veremos o que esperamos, certo? Administrador versus os usuários. Portanto, há outra tabela aqui e tudo o que é uma tabela de relacionamento muitos para muitos ou um vinculador até entre os usuários e funções chamadas funções de usuário ASP NET. Então, este realmente pega o ID do usuário e a ideia de função e diz que essas duas coisas que associei é que um usuário pode ter várias funções. Portanto, não é que um usuário tenha que ser apenas um ou outro. Ele pode suportar vários. Mas isso é mais uma vez, depende da discrição das necessidades da sua empresa. Então, eu queria fazer um teste de administrador para esse usuário. Eu não quero entrar em funções de usuário e vou dizer que esse ID de usuário, depois vou para as funções e vou usar esse ID de administrador e vou dizer esse ID de regra. Eu, uma vez que faço isso, fora da bunda nula. O usuário administrador é visto como administrador em nossa cena para ter esse papel em nosso sistema. Bem, cabe a nós dizer o que esse papel pode e não pode fazer. Mas, no que diz respeito ao sistema, esse usuário tem essa função. É simples assim. Mas o símbolo nem sempre significa prático porque não há usuário que venha por aqui e faça isso. Então, vamos pular para assistir realmente se espera que aconteça no sistema. Então, quando alguém registrar isso, vou fechar todas as guias. Quando alguém se registra é quando precisamos associá-los à parte do rolo. Então, volte para a página de registro. O que vamos fazer na postagem é se a criação do usuário tiver sido bem-sucedida, teremos que adicioná-lo à regra. Então podemos dizer que as informações de login criaram um novo usuário, uma chamada com basilar, tudo bem. Por baixo desse registro, veremos um gerenciador de usuários de peso. Então, devemos ter o gerente de usuários, sabemos, a existência de sua polaridade. E então vamos ver um ponto. E se eu apenas digitar regra, você verá todas as coisas potenciais que você pode fazer com o monitor do usuário em relação à regra. Então você pode adicionar ao rolo. Você pode, desculpe por isso. Você pode obter rolagem, colocar os usuários em uma regra específica. Você pode verificar se nossos usuários em um rodeio, tantas coisas. Tudo bem, então, neste caso, queremos adicionar ao rolo, assim por diante para alterar uma pia. E então isso leva dois parâmetros, o usuário que acabamos de criar e o papel. E eu vou sim, o que sempre posso digitar administrador, se eu escrevi isso incorretamente. Nesse ponto, eu estaria depurando por algum tempo me perguntando por que essa coisa não funcionará porque eu provavelmente senti falta do velho e eu, e estou alheio a isso. Talvez outra pessoa venha ver você escreveu errado. Então eu fui dizer roll, que é nossa cruz constante e não estou vendo isso. Então deixe-me pular de volta aqui. Tudo bem, então menos e falhas e eu só vou esculpir eu mesmo. Se você viu o IRS antes, então tudo bem. Primeiro, preciso tornar isso público. Eu não o tornei público. E dois, que o nome do arquivo é regras. Os nomes das classes também devem ser linhas. Tudo bem, então vamos tentar isso de novo. Então, papéis, e se eu controlar pontos nulos, podemos acertar. Então, funções, administrador de pontos ou cliente. Então posso dizer adicionar duas linhas e as linhas, cliente e acho que isso é mais legível, Isso é seguro para compilação. Claro. Portanto, não há nenhum erro em relação à ortografia ou qualquer ambiguidade em relação a qual regra está sendo usada aqui. Tudo bem, então vamos fazer um teste rápido e registrar um novo cliente. E eu tenho alguns erros. Preciso começar apenas com a ortografia aqui. Então, estou registrando esse novo cliente. E uma vez que fizermos esse discurso e saibamos que ele está funcionando. Então, se eu voltar para os bancos de dados C1, temos nosso novo cliente aqui, cliente. E você vê que o ID começa com 22 algo algo. Se isso é bom, se olharmos na tabela de funções do usuário, removo a anterior que fizemos. Não, você verá que temos esse cliente, então temos esse ID de cliente, bem como o ID da função que corresponde à função do cliente. E isso é praticamente isso. Portanto, não, todos que passarem por essa autenticação específica, desculpe, esse processo de registro específico sempre será adicionado ao cliente. Agora, neste momento, você pode considerar, você sabe, se quiser diferente ou quiser permitir que as pessoas se registrem como funções diferentes. Porque você tem isso às vezes em sistemas que podem servir no embarque. Talvez sua função possa representar esse departamento, certo. Ou algo assim. Então, você quer usá-lo para identificar qual departamento eles são, qual função eles desejam ter no sistema para que, quando houver apenas o uso dessa função específica. Nesse ponto, você começa a querer olhar para o papel de gerente, que permite que você interaja um pouco mais com a regra é estável. Assim, você sempre pode gostar, bem, você tem o usuário e os gerentes descendentes, você tem rural e gerencia ou em relação ao papel de identidade ou qualquer que seja sua classe personalizada. E então ele pode simplesmente ir em frente e injetar isso na sua página de registro. E estou supondo que neste momento você já sabe como configurar como uma lista suspensa e todas essas coisas. Portanto, não estou focando na interface do usuário à parte. Então, o que estou tentando 0 é que você pode realmente configurar sua lista de funções aqui como uma nova lista de seleções. Essa função TX dos pontos do gerente. E então ele pode apenas obter os papéis como uma lista de regras ali mesmo. E você pode colocá-lo na lista, se quiser, você pode filtrar por. É pelo menos a oferta vinda do banco de dados. Então, se você estiver em sintonia com a forma de manipular listas usando links e se estende em métodos, então será o mesmo princípio aqui. Então você poderia fazer isso. E então você tem o nome como o campo a ser selecionado e o nome como o que está sendo exibido. E ali mesmo, você poderá listar todas as regras na sua página para que seus usuários possam selecionar qual deles eles querem. Então, para colocar mais praticidade nessa sugestão, o que eu fiz foi modificar o modelo de entrada. E adicionei uma propriedade selecionada, quatro rolos e um para a função necessária. Então, eles identificam qual linha eles querem para enviar com sucesso. Sabemos que isso já está certo. Então, no fgets, vou dizer entrada, que é o objeto do modelo de entrada que o pH usará. Estou inicializando-o para uma nova instância em que as regras serão iguais a uma nova instância da função, gerencie papéis adultos. O ponto obtendo o nome como seletor, o valor do seletor e a exibição. No C-Sharp nas versões mais recentes do CSRP pode realmente dizer novo, basta dizer o que eu fiz aqui. Em vez de dizer novo modelo de entrada, novamente, o pecado você, mas às vezes para legibilidade eu ainda o mantenho. E embora os tempos adultos usem necessariamente, é porque o construtor pode estar implícito. Mas isso é além do ponto. Então, queremos ter certeza de que temos isso lá e, em seguida , não vamos adicioná-los à função em vez de codificar a regra, vamos assumir o papel que estava vindo da entrada. Tudo bem? É claro que temos que repetir essa atribuição da lista de regras se algo sentir para que o pH possa recarregar a lista com sucesso. Então, vamos ver o que isso parece. Então, na própria página Registrar, tudo o que fiz foi adicionar tag select. Tudo bem. controle de formulário deu os itens vindos da lista de papéis de ponto de entrada e é para a função. E, em seguida, ele deseja que o padrão selecione o rolo desejado e não está listando as regras provenientes do sistema. Tudo bem, isso é simples. Então, se eu estiver me registrando como cliente e cliente ou me deixar registrar como administrador. E verei o Administrador um e preencherei isso. E então eu bati no registro. Tudo bem, então nós acessamos a página de confirmação e se eu voltar para o projeto e olhar na tabela de usuários, vemos que temos admin 1 e id 0, 0, 1, b. Digamos que se eu for para a tabela de papéis, agora vou veja que eu tenho 000 001 BE. E este é o ID de administrador que pode fazer referência cruzada, se desejar. Mas meu ponto é que, é assim que você faria com que o usuário selecionasse sua própria regra e se integrasse com uma regra específica. Claro, mais uma vez, você sempre pode manipular essas listas. Então, se for, eu tenho a função de administrador e outras regras baseadas no usuário, mas você não quer que as pessoas selecionem administrador, então você acabou de excluir dessa lista quando ela está sendo carregada. Então, com tudo o que foi dito e feito, é assim que você adiciona regras aos usuários. Saiba, quando voltarmos, veremos como podemos restringir o que certas regras podem ou não fazer. 25. Implemente autorização baseada em papéis: Tudo bem pessoal, então nesta lição queremos ver como podemos saber começar a implementar as regras e restrições com base nas regras em nosso aplicativo. Então, agora eu tenho um site de poros e você pode ver que eu fiz seu pequeno elevador de rosto para a primeira página. Só um pouco informativo. Mas se olharmos para anúncios e nossas categorias, vemos que as categorias estão exigindo autorização ou autenticação, enquanto os anúncios não são. No entanto, em anúncios, posso facilmente fazer edições comuns, ver os detalhes ou excluir um anúncio, certo? Então essas são pequenas coisas que, claro, seriam bandeiras vermelhas em qualquer sistema. E você quer ser capaz de restringir o que certas pessoas podem fazer. E temos certeza que as pessoas podem ir porque neste momento, posso entrar aqui como cliente e ainda ser capaz de manipular todas as categorias. Portanto, queríamos ter certeza de que o acesso às categorias é restrito apenas a usuários administradores. E provavelmente gostaríamos de ocultar a capacidade de manipular o anúncio ou pelo menos editar ou excluir um anúncio ou apenas usuários administradores. Portanto, uma modificação nos ajudará a modificar o código por trás do arquivo, pois há uma página é página, que mais uma vez pode ser facilmente a ação ou até mesmo o componente razor. E o outro faria com que modificássemos os raios reais da página, que seria semelhante ao aplicativo MVC em uma página de currículo. E praticamente a mesma coisa para um componente blazer. Então eu queria começar com o que eu acho que são as frutas penduradas mais baixas, que está modificando o código por trás. Então, tudo o que eu quero fazer é ter certeza de que quando a pessoa que tenta fazer login, quando vier e tentar fazer login, ela tem que ser um administrador. Tudo bem, então deixe-me logotipos e eu vou voltar para o nosso código de aplicativo. E tudo o que eu tenho que fazer realmente para as categorias é especificar o autor, pois ainda temos que voltar ao nosso autor como filtro. Mas então vou informar que o papel, então você verá aqui que você pode especificar que o autor tem atributos com o esquema de autenticação Wanda. Assim, você pode restringi-lo se for cookie ou se não for cookie, permitir ou não permitir, etc. Posso especificar uma política. Estaremos analisando as políticas mais tarde. E também posso especificar as funções. Então, observe seus papéis, certo? Portanto, posso ver que mais de uma função pode acessar uma área específica. Então, quando eu digo regras aqui e digo igual, eu realmente daria uma string. Agora essa string seria como se fosse preciso uma lista separada por vírgulas, diz aqui que nos recebe. É uma lista delimitada por vírgulas de regras que têm permissão para acessar o recurso. Então, se eu quisesse vírgula de administrador, cliente, coma, crescer uma regra de vírgula para quantas regras eu quiser dar autorização para um recurso específico, posso apenas vírgula, separá-las em todo o discurso. O perigo das cordas mágicas e escrevê-las assim. O, do matzah na maioria das vezes você vai realmente vê-lo escrito. Agora, nessa situação, quero que apenas o administrador possa acessar as categorias. Então eu sei que é apenas um. Agora posso apenas dizer regras, que é minha classe estática. E, em seguida, diga administrador. E então, como muitos outros papéis são Xudong, só temos que concatenar as cordas à medida que avançamos e juntá-las. Métodos mais avançados incluiriam a criação de um filtro de autorização personalizado, que podemos ver mais tarde. Mas agora estou apenas mantendo isso simples e mostrando como você autorizaria para uma regra específica No conjunto de sua aplicação. Então, agora, se navegarmos até a página de categorias e tentarmos autenticar como cliente, teremos essa página de acesso negado. Agora, esta página que não criamos, é mais uma vez uma daquelas páginas que podemos enviar e modificar se quisermos, mas ela está lá no diretório negado de acesso de barra de barra de identidade. Tudo bem, então, enquanto nos autenticamos como usuário ou como cliente nessa situação, não podemos prosseguir para esse recurso específico. No entanto, podemos ir a outro lugar como uma pessoa autenticada, simplesmente não para a página de categorias. Então, como muitas páginas, ações ou controladores que você gostaria muito não. Você pode adicionar essa autorização com a especificação de regras lá. E não quando tento fazer a mesma coisa com o admin one, que é um usuário que acabamos de adicionar através do registro. Deixe que os usuários tenham sua própria regra. Agora podemos acessar categorias. Tudo bem, então é assim que isso funciona. Agora, vamos pular para anúncios. Então, sim, gostaríamos que os anúncios fossem abertos ao público. No entanto, só quero que os clientes possam criar novos e só quero que os administradores possam editar ou excluir. Assim, pessoas comuns podem vir e ver a lista de anúncios. Eles podem clicar nos detalhes. Claro, mas apenas menos um usuário autenticado permitiria que você crie o seu próprio. Eu nem quero que um administrador seja capaz de criar o seu próprio. Quero que os clientes possam criar seus próprios anúncios e só quero que os administradores possam editar e excluir. Então, na página de índice dos anúncios, tudo o que vamos fazer é modificar esta seção que exibe que criam novos botões. Então, vou dizer no sinal se o usuário pontuar. Então lembre-se de que um usuário representa nosso principal de usuário para o usuário conectado, certo? Então, vou dizer que se o usuário estiver em rolo, lá vamos nós. E então aqui mais uma vez, apenas digitamos o nome do papel que não queremos necessariamente fazer. Nós preferimos usar nossas constantes. Então, funções, eu precisaria incluir esse namespace na porta de exibição. Então, vou dizer que o namespace não é, mas sim para as importações de visualização e, em seguida, adicione a instrução using para ele. Então, sempre que você quiser usar nossa classe ou em qualquer outro lugar dentro das visualizações, basta soltá-la nas importações de visualização ou você sempre pode soltá-la nessa página específica. Então, papéis, pontos. E eu quero verificar se é um cliente. Em seguida, exiba isso, Criar novo, e vou corrigir a formatação aqui. Tudo bem, então eu quero exibir isso somente se os usuários no papel de cliente. Da mesma forma, para editar e até mesmo excluir, e você pode modificar isso. Quero dizer, eu poderia escrever duas declarações. Não quero escrever duas declarações. Vou apenas mover detalhes para o topo, e então vou ter uma instrução if, se o usuário estiver se inscrevendo, e então estamos verificando se eles estão na função de administrador, então podemos exibir esses dois links para eles. Tudo bem, então é isso. Assim, você pode começar a modificar o que determinados usuários veem em comparação com o que outros usuários veem. Digamos que todos estejam autenticados, alguns são nós. Nesse caso, a pessoa está olhando para este anúncio não é comprada. Deixe-me começar isso do não. Certo? Mas se você é autenticado e em uma função específica, então você vê alguns dos administradores de infravermelhos que você vê isso, certo? E se você não for nenhum dos dois, então você não verá nada disso. Então, vamos dar uma olhada no que obtemos depois desses meses. Tudo bem, então estou navegando para a velocidade do anúncio como nossa pessoa normal. Não sou autenticado de forma alguma, forma ou forma. Estou vendo a lista de nós e sempre posso navegar até os detalhes deles e tudo bem. Esse é o resultado esperado, certo? Agora, se eu registrar nosso login, desculpe, como cliente ou navegar por ele enquanto estiver logado como cliente, verei que posso ir em frente e colocar meu próprio anúncio, se quiser. Mas ainda estou restrito apenas a visualizar os detalhes de outros anúncios que outros usuários podem ter criado. Agora, se eu entrar como administrador, agora terei o poder de manipular esses anúncios. Então eu sempre posso ver os detalhes, sim, mas eles também podem editá-los e excluí-los. Mas não consigo criar um como administrador porque essa é a regra do sistema, não as funções de um cliente. Então, mais uma vez, estou criando minhas próprias regras de negócios para esses cenários, mas estou apenas dando suas idéias sobre como você pode implementar os protocolos necessários ou de segurança que analisaremos no sistema em sua organização. É assim que é feito no nível mais básico. 27. Solicitação de acesso em pedido: Tudo bem, então vamos discutir a configuração de autorização baseada em reivindicações. Então lembre-se de que acabamos de passar pelo que são as reivindicações. As reivindicações são informações sobre o usuário que está registrado no momento. Portanto, quanto mais reivindicações tivermos disponíveis para nós, mais decisões podemos tomar para saber se devemos permitir que restringimos o usuário de um determinado recurso ou endpoints. Então, o que vou fazer é trabalhar com a página de criação para o anúncio. Vamos ver que nenhum usuário com menos de 18 anos tem permissão para criar um anúncio. Tudo bem? Portanto, você não deve ser capaz de criar um anúncio, a menos que tenha no mínimo 18 anos de idade. Agora já sabemos como os restringimos usando o sinalizador autorizado no topo. E vamos analisar as políticas, mas quero mostrar diferentes maneiras de elas realmente interagir com as limpezas. Porque vimos que você pode acessar as limpas em vez de precisar acessar o banco de dados. Então, e se você precisasse acessar a reivindicação? uma decisão com base nessa reivindicação, seja neste caso o, você sabe, mostrar o acesso negado. Por exemplo, REO alguma outra regra de negócios que você precisa para implementar o que queremos saber qual é o valor da reivindicação. Então, digamos que eu queria a idade mínima do usuário atual. Posso começar dizendo que var é que a idade mínima é igual ao usuário, que representa o objeto de usuário que reivindica o objeto principal nos contextos HTTP. Então, o ponto do usuário encontre primeiro. Antes mesmo de eu mostrar a multa primeiro se você disser user.email realmente vê reivindicações em frente. Você vê várias identidades que você pode determinar que estão em rolo. Você pode ver reivindicações, et cetera, et cetera, et cetera, certo? Todos eles estão disponíveis para você. Então, se você fizer reivindicações, as reivindicações são apenas uma coleção das reivindicações. Então você poderia realmente usar isso para dizer, primeiro nossos padrões são apenas consultá-lo, interrogar a lista da mesma forma que você teria interrogado algo no banco de dados. Eu poderia dizer Klimt como nossa expressão lambda padrão q dot. E então eu pude descobrir que isso é que eu quero, certo, é equivalente a, então o tipo aqui é uma string. E é por isso que temos nosso usuário reivindica classe constante. Portanto, não preciso digitar essas strings estáticas o tempo todo. Então, dirá que o usuário afirma que sua idade mínima. E depois que eu conseguir isso, isso não seria uma reivindicação. Então, é claro, recebendo a reivindicação, não sei se ela realmente existiria. Só vou fazer pontos de interrogação. Então essa é minha coalescência nula onde diria: Se não existir, basta retornar null, caso contrário, tente obter o valor se ele existir. Tudo bem, então essa é uma maneira de encontrar a idade mínima. Então você vê aqui que podemos interrogar a lista de reivindicações assim como faríamos qualquer outra lista em C sharp. Agora, uma alternativa a isso teria sido a primeira com a qual comecei, que seria a primeira descoberta. Então user.name encontre primeiro. E então, dentro disso, poderíamos simplesmente colocar na string que representa essa afirmação. Então, encontrar primeiro pega o tipo como um parâmetro e ele apenas retorna nulo se não for muito o telefone dele. E então o tipo de retorno, é claro, ainda está limpo. Então isso significa que eu ainda teria que tentar obter esse valor. É claro que esse valor será string, então ainda não temos isso como booleano. Então, isso é outra coisa que você teria que considerar. E embora a coisa também seja que esse primeiro método de achado também poderia ter uma expressão lambda semelhante ao que fizemos com a multa primeiro. Então, estou apenas mostrando que todas as suas opções são boas para conhecer suas opções, mas é claro que, ao mesmo tempo, é bom se estabelecer em um padrão para que, quando todo mundo tem que trabalhar juntos, todos estão no mesmo quarto, certo? Portanto, essas são maneiras diferentes que você pode usar para acessar uma reivindicação específica e, em seguida, o valor que eles gritam tem. E, claro, com base no tipo de dados que você está esperando ou que você precisa processar, então você precisa fazer sua conversão. Então, o que vou fazer é ter essa declaração if que diz se a idade mínima é equivalente a nula, o que significa que o tipo limpo provavelmente não existe para esse usuário. Ou se após a análise, obtemos o valor de false, então queremos redirecionar para barra de identidade nosso acesso de barra de dois pontos negado. Portanto, o acesso negado é um pH que está disponível para nós através do conjunto de identidades de páginas. Claro, se você adicionar outra peça para a qual você queria que eles fossem, você poderia simplesmente lê-los lá naquele momento. Então isso é tudo o que estamos fazendo. Então, vamos fazer um teste com nosso cliente que sabemos que está no dia 18. Então, depois de fazer login com o cliente menor de 18 anos e, em seguida, tendência para criar novos, vemos que não somos redirecionados para o acesso negado. Você não pode acessar isso como você tem menos de 18 anos? Não. Estou tentando isso novamente no modo de depuração ou no mesmo usuário, eu apenas acertei pontos de interrupção e colocamos um ponto de interrupção em vez de nossas instruções if para que pudéssemos parar. E posso mostrar o que realmente está acontecendo nos bastidores. Portanto, temos nosso princípio de reivindicações de usuários. Se estendermos isso, vemos que temos todas as reivindicações. Se olharmos nas reivindicações, veremos que temos as padrão que conhecemos e, em seguida, as personalizadas. Portanto, a idade mínima é falsa como esperado. E então, quando chegamos a este ponto, ele diz falso, então nem precisamos verificar se é. Então essa verificação de conhecimento era realmente eu ser excessivamente cauteloso. Mas nesta fase, dado que estamos controlando o que as reivindicações entram, foi o que fizemos na última lição. Em nenhum momento devo usar um login sem a reivindicação específica, certo? Então, a menos que algo tenha mudado todo o sistema. E é por isso que temos regressão leve em testes e testes de unidade para garantir que essas coisas não aconteçam, certo? Então, se for a vantagem mínima, posso realmente fazer com tudo isso. Mas depois de analisar essa string, verificamos se ela é equivalente a false e é por isso que vamos para o redirecionamento Return. Assim, você pode ir em frente e testar aquele usuário da pátina cuja data de nascimento os colocaria além dos 18 anos de idade. E então tente esse cenário novamente e veja o que acontece. Portanto, essa é a etapa número 1 de como podemos usar as reivindicações durante o tempo de execução do sistema. Quando voltarmos, veremos como podemos implementar políticas. Então, bem, é claro que seria difícil colocar esse tipo de lógica aqui, lá e em todos os lugares. Você necessariamente não iria querer fazer isso. Então, vamos começar a analisar políticas que podemos usar nano para impor que reivindicações específicas devem estar presentes e provavelmente pode até estendê-lo para C, deve ter certos valores antes que esses usuários possam ser admitidos em determinados lugares. 28. Autorizações baseadas em políticas de implementação: Certo pessoal, então a lição que estamos aqui, estamos discutindo por que não é prático ter esse tipo de lógica em todo o lugar sempre que quisermos impor certas restrições com base em reivindicações. Então, nesta lição, veremos essa construção chamada política. Então essa jornada começa no arquivo CSS de ponto de inicialização , onde temos que adicionar autorização ao nosso serviço, seu Batman. Então, estou fazendo isso logo após adicionar identidade padrão e ler antes que as artérias das páginas autorizem o filtro. Então, só estou dizendo que eu teria autorização e, em seguida, as opções que estou alimentando nela seriam somar política. E você verá que eu tenho políticas ponto é mínimo. Então, olhamos para isso em alguns. Essa é apenas outra constante que eu criei. Assim, você pode simplesmente seguir em frente opções que a política de anúncios, ponto das políticas é a idade mínima. E então temos uma expressão lambda onde vemos a política exigir reivindicação, e então temos nossa referência de reivindicações para isso é limite mínimo e, em seguida, o valor que esperamos. Então, a sintaxe geral para adicionar política e adicionar os requisitos para definir a política no nível mais básico, algo assim, certo? Estamos apenas abrindo um bloco de opções. Vemos a política de adição de pontos de opções. Damos um nome à política. Portanto, isso poderia facilmente ter sido fluxo estético. Tudo o que estou fazendo realmente é referenciar constantes string de uma classe chamada políticas, os arranjos militares com as fotos também. Então lembre-se que originalmente nosso usuário reivindica classe, que é nossa classe estática com todas as nossas constantes, strings são originalmente, eu tinha em outros serviços, Mas não, eu quero mais constantes de natureza semelhante, certo? Então, em vez de colocá-los todos na identidade de movê-lo para sua própria pasta, altere o namespace de acordo também, não, são constantes e, em seguida, reivindicações do usuário e, em seguida, temos políticas unindo-o nesse namespace. Portanto, as políticas serão armazenadas em nome das diferentes políticas que queremos aplicar em todos os aplicativos. Então, na inicialização, estou apenas referenciando políticas estranhas, políticas. O ponto é a idade mínima, que é uma idade mínima da string. E então estou iniciando uma expressão lambda onde estou vendo que essas são as opções, essas são as configurações para nós na política. Então aqui estou vendo pontos de política exigem limpeza com esse nome, que é a idade mínima. E o valor. E a verdade é que você poderia realmente listar o valor potencial, então ele não precisa ser um arquivo. Você poderia apenas separar os diferentes valores possíveis que esse creme precisa ter para que esse usuário seja visto como candidato legítimo para realizar uma ação específica. Agora, e se você quisesse mais de uma reivindicação em uma política específica? Aqui você pode ver na política e, em seguida, para essas expressões lamda, vamos apenas iniciar no bloco de objetos, certo? E então você pode ver pontos de política. E, em seguida, comece a adicionar todas as configurações para essa política específica de acordo. Então você apenas ponto e vírgula e, em seguida, você tem política requer outra reivindicação com esses conjuntos de valores, et cetera, et cetera, et cetera. Portanto, é muito fácil aplicar ou criar uma política que o aplicativo saberá que existe. Então eu vou reverter para o simples que eu tinha antes onde estamos vendo a política adotar chamada é que a idade mínima é chamada de idade mínima e, em seguida, exigir que a política exija que a reivindicação, desculpe, é idade mínima com um valor verdadeiro. Então, agora que definimos a política, precisamos colocá-la em uso. Então, vamos para nossa página Criar. E se você olhar para o topo, adicionei um autor como filtro. E, em vez disso, autorize a filtrar políticas iguais ao que é o nome da política. Então, esse é outro motivo. Um barco está fazendo as classes constantes e tentando eliminar ou reduzir o máximo possível os extremos. Porque se você tiver um erro de digitação aqui, seria muito mais difícil descobrir por que isso não está me deixando passar, mesmo que eu tenha claramente a política de dados limpos diz que preciso é só porque você provavelmente usa o errado nome da política ou nome da política com erros ortográficos. Então, é sempre bom ter essas cordas em constantes por todo o lugar, estão em um só lugar. Então você não precisa usá-los em todo o lugar e, em seguida, basta fazer uma referência. Então, apenas fazendo isso, nós realmente eliminamos a necessidade de entrar manualmente no usuário limpa e isso, em seguida, tentar descobrir quais são os valores. Porque não, nosso mecanismo autorizado fará tudo isso por nós. Então, em qualquer lugar em que quisermos aplicar uma política específica, isso é tudo o que você precisa fazer. E, claro, depois de colocar um filtro acima de uma página, ele substituirá a política padrão que estaria em seu aplicativo. Portanto, esse é apenas o padrão autorizado. Então, uma vez que você colocá-lo lá. Dinheiro, bem, ele vai substituí-lo e dizer, bem, eu quero autorizar com base nesta política. Então, enquanto estamos neste tópico, vou mostrar outra maneira de podermos realmente impor esses filtros globais, o que seria uma maneira mais global de fazer isso em qualquer aplicativo principal. Então, onde analisou o fato de que, se estivermos adicionando as páginas do Razor, teria a ver com isso. Particularmente se estivermos fazendo isso com o MVC, a sintaxe pareceria um pouco diferente. Mas então eu posso realmente remover tudo isso e simplesmente reverter para os advogados de páginas ou controladores e visualizações do AD e saber que eu tenho esse bloco de autorização com políticas alinhadas, nossas opções sendo on-line, Posso adicionar uma linha de opção que posso ver opções de queda de ponto política Buck é igual ao novo construtor de políticas de autorização. E então eu tenho que ir em frente e incluir a declaração de uso. E então, nesta conta, vamos tocar em algumas outras configurações. Então, o primeiro que vou ver é exigir usuário autenticado. Então este sou eu sentado acima da política do robô com autorizações de trabalho completo. E estamos vendo que exigimos o usuário autenticado. E então você poderia dizer exigir reivindicação. Então isso seria como eu disse, global, isso não seria personalizado um lakh supervisionando. Queremos essa opção. Então você pode sentar tudo o que quiser como uma autorização global cair a política Buck sobre o que é a política, é basicamente o que devo fazer quando esse filtro autorizado ou um filtro anônimo baixo não estiver presente? Então, se alguém não é prisão, dinheiro descontroladamente, como colocamos este aqui explicitamente, então o que eu faço? Muito semelhante a como acabamos de ter o requisito global de autorização aqui. Mas você vai ficar um pouco mais granular com esse método porque agora podemos construir exatamente quais requisitos, quais esquemas, tudo o que queremos na meta do portão do padrão antes de chamarmos Build. E então construa sem dizer. Ok, esta é minha política de queda Buck. Sempre que não há autor como nosso filtro de autorização explícito com requisitos específicos lá, então é isso que eu queria fazer. Então, agora temos duas coisas. Statista, vamos testar se a política funciona. Então, seja o que for que acabamos de provar nesta página, quando um usuário tiver menos de 18 anos, não deve ser capaz de acessar esta página. E vamos provar que ainda obtemos o prompt padrão para fazer login para qualquer coisa que seja dito ser autorizada. Tudo bem, então estamos aqui em nosso aplicativo e finalmente, para fazer em primeiro lugar, eu não sou autenticado. Fui para entrar em categorias. E lembre-se de que as categorias deveriam ser. Ele não permite anônimo. Portanto, os anúncios permitem anônimos, que eu ainda posso navegar porque isso permite que filtro anônimo está substituindo essa política. E então, quando vou para categorias que não permitem anônimo, estou sendo solicitado a fazer login. Então isso está funcionando tanto quanto eu posso ver. Então, quando faço login como cliente menor de 18 anos, bem, o sistema pode acessar é negado porque sou um cliente diz que deve ser capaz de obter as categorias, tudo bem. Mas quando vou a anúncios, não deveria ser capaz de criar novos por causa da política para a idade mínima. Então, quando tentei criar novo, estou recebendo acesso negado. Certo. Da mesma forma. Então, bem ali. Não preciso dizer manualmente retorno, acesso direto local negado ao sistema, a política de fallback, em combinação com minha política explícita que estou usando para proteger a fala, está fazendo isso por mim. Está verificando a reivindicação e a reescreveu. Então isso é tudo o que você realmente tem que fazer. E você quer ser um tipo de granular com certas permissões. Você cria as afirmações que você conhece, as necessidades da pessoa. Portanto, uma pessoa deve ser capaz de editar, o que outra pessoa deve ser capaz de editar. Você só se certifica de que eles são as reivindicações que não precisavam em nenhum momento. E, em seguida, você apenas protege suas páginas diferentes com as políticas que você alinhou no arquivo de inicialização. 29. Revisão de seção — reclamações e papéis: Tudo bem pessoal, então esse é outro marco e vamos rever o que fizemos nesta seção. Então, revisamos a autorização básica, analisamos como funciona em um blazer todos os filtros eram. E em nossa startup, também verificamos como podemos impor esse autor como filtro globalmente em todas as páginas do Razor e, por extensão, opções e controladores MVC, se você estiver usando tal up. Desde então, também implementamos políticas em que sabemos como fazê-lo mais globalmente sem misturar e muito na sintaxe, podemos simplesmente fazer algo assim. Também analisamos a criação de nossas próprias políticas com base em reivindicações. Portanto, cremes são pedaços de informação que sabemos como adicionar dinamicamente ao usuário assim que o fim de semana de login fizer determinadas determinações com base nas informações que eles forneceram ou com base em seu usuário necessário. E então podemos adicionar essas afirmações a essa identidade ou ao princípio de reivindicações antes que o usuário realmente seja autenticado no sistema. Como resultado, podemos saber implementar políticas que nos permitem restringir ou permitir certas ações ou privilégios com base nas alegações de que eles têm prisões. Então, também tínhamos dado uma olhada nos papéis. Demos uma olhada em como podemos permitir que um usuário selecione a função que deseja no sistema e, em seguida, como realmente os adicionamos a essa função depois. Se ele nasce permitir que eles cortem a função, você pode simplesmente adicionar a regra ao usuário quando ele estiver fazendo login. Porque pense em sites maiores como a Amazon no YouTube. Você realmente não seleciona a função que deseja ter com os cones do YouTuber. Eles só sabem que uma vez que você cria dois pontos, você é um usuário. Então, eles realmente teriam feito você passar automaticamente como usuário. E então eles têm outro mecanismo onde eles adicionam seus próprios administradores e outras linhas e assim por diante. Então, nesse ponto, você gostaria de analisar a criação dos valores no painel de gerenciamento que permite que você tenha controle total sobre algo assim. Mas para os usuários que entram pela internet, você dá a eles o papel deles no sistema, e esse é o papel deles daqui para frente. Então, com base no seu modelo, você sabe, saber como lidar com essa situação. Então, em última análise, é isso para esta seção. Como eu disse, eu sei que você teria passado por algumas coisas. Não é um sapato único para todos. Então, estou apenas mostrando cenários diferentes e maneiras diferentes de você ser criativo e prático em torno de como você protege seu aplicativo para você e para seus usuários. 30. Visão geral da seção — O que é OpenIdConnect: Ei pessoal, bem-vindos de volta. Então, nesta nova seção, vamos implementar provedores de identidade OpenID Connect em nosso AP. Isso é um bocado, mas eu vou acabar com isso para você. Então, estou no site do OpenID dotnet slash Connect e ele faz diretamente oposto do que o OpenID Connect realmente é. Então, em poucas palavras, ele permite clientes. Clientes sendo seu site, você está acordado, seja lá o que for que seu cliente ou seus usuários estejam usando esse front-front, Esse é o seu cliente. É um baixo estresse verificar a identidade de um usuário final com base na autenticação e realizada por um servidor de autorização, bem como obter informações básicas de perfil do usuário final, em nossos riscos como maneira. Então, em poucas palavras, sempre que você acessa um aplicativo e ele permite que você diga, enviando nosso login com o Facebook ou com o Google, certo? Preciso parar esse assento Potnia. Vai para o Google e você terá que digitar suas credenciais ou talvez você já esteja conectado ao Google naquela máquina ou nesse dispositivo. E isso só permite que você passe e, de repente, você está assinado nos novos sites tem todas as informações fornecidas pelo Google. O Google fornece um Serviço OpenID Connect como essas janelas, como este Facebook. E nós olhamos para isso nas partes anteriores em que estávamos adicionando todos esses serviços no Twitter e Google, Microsoft e Facebook. Todos eles podem dobrar como servidores OAuth. Então, provedor de autenticação, desculpe, Então, nesta seção, vamos implementá-lo. Não fizemos isso então porque era meio cedo no jogo. E eu te dei algumas técnicas, mas vamos rever essas coisas. E o que vamos fazer é nos concentrar em fazer isso com o Google. Mas assim que tirarmos o Google do caminho, pelo menos você entenderia que, se quisesse dar suporte a todos os outros e você estiver acordado, dê aos seus usuários todas essas opções, pelo menos você terá uma apreciação de como isso pode ser feito. Então, na próxima seção, vamos fazer é analisar como você pode obter a chave e o segredo do Google. E então vamos integrar totalmente em nosso AP daqui para frente. 31. Inscreva-se em credenciais do Google OAuth: Tudo bem pessoal, então, nesta lição, vamos analisar rapidamente como podemos obter a chave Klan e um segredo que precisamos do Google para nos permitir autenticar em contas do Google. Agora você pode navegar para a plataforma Cloud acessando o ponto da nuvem do ponto do console google.com. Você terá que fazer login com uma conta do Google e, em seguida, você terá acesso a este painel. E isso seria semelhante para qualquer um dos outros provedores. Você terá que fazer login com uma conta que pertence a esse provedor para ter acesso ao back-end onde eles fornecem as chaves, certo? Então, depois de fazer login ou criar cones do Googler e acessar uma tela semelhante a essa. Você quer ir para credenciais e clicar em criar credenciais. Então, também se todas essas opções estivermos escolhendo ID do cliente OAuth porque é isso que estamos procurando. E então especificamos que tipo de aplicativo. Só vou dizer aplicativo da web onde você vê que tem opções diferentes e você pode dar a ele um nome específico, se desejar, classificados de colega SQL ou qualquer que seja o seu projeto. E então você vai em frente e aperta Criar. E quando você clicar em cria, isso lhe dará esse ID e isso secreta, e é isso. Então você precisa copiar esses valores. E lembre-se de que temos que usá-los em nosso aplicativo para que você queira mantê-los seguros, menos o que eles não carregam o JSON ou não, mas mantê-los seguros ou não, não faz sentido se você tentar copiar o meu porque no momento Você está fazendo esse curso, eu teria destruído a evidência de qualquer maneira. Então eu recomendo que você experimente, obtenha sua própria chave e segredo, e então você pode ter sua própria experiência controlada no seu lado. Então, quando voltarmos, estaremos integrando-os em nosso AP. 32. Adicione o Google Auth a App: Então, depois de recuperarmos ou chaves, vamos voltar para o nosso up e iremos para a classe de inicialização onde queremos adicionar um novo bloco que veremos serviços que adicionam autenticação. Portanto, lembre-se da última vez ou mais cedo no curso quando estamos fazendo isso, adicionamos o Google adicionar aos serviços, o bloco de autenticação em que estávamos especificando que estamos usando o cookie. Tudo bem, então nós realmente poderíamos tê-lo removido porque fizemos todas as coisas que lidam com tudo isso. Bem, não, podemos voltar para isso. E vamos adicionar no Google, certo? E qualquer outro provedor, certifique-se de ter a biblioteca necessária. Então, para esse caso você possa ter removido as bibliotecas, já que não a usamos. Você definitivamente precisa ter Microsoft dot ASP, Core Authentication Google. Então, se você não tiver, você pode simplesmente ir e encontrá-lo em pacotes NuGet, certo? E ainda tenho todos os outros pacotes dos outros provedores que talvez não acabemos usando agora. Mas essas são as bibliotecas que você precisa, caso você escolha uma das opções acima, e não necessariamente o Google como estou demonstrando. Então, volte para a inicialização depois de adicionarmos o Google quer dizer Opções. E então temos nosso bloco de objetos onde estamos vendo as opções do Google. Esse ID de tendência é esse. E o segredo é que não, já discutimos que é uma má ideia para se colocar o ID e o valor secreto está morto na inicialização, a alternativa provavelmente teria sido as configurações do aplicativo, mas depois entre as duas eles, definitivamente vamos enganá-lo no controle de fonte. E se for um controle de fonte acessível publicamente, como o GitHub, o repositório é público, então isso é uma má ideia. Então, o que queremos fazer é adicioná-los ao segredo. Então, basta clicar com o botão direito em nossos projetos. E então vamos para os segredos Gerenciar usuários, que nos dará nosso arquivo de configuração secreto, certo? Então eu já o tinha adaptado com o ID e o segredo do cliente. Então, não, praticamente consigo ver como ele é usado. Então, vamos pegar esse valor. Então esse é o ID do cliente. Coloque-o aqui, este é um ID de cliente para o Google. E então fazemos a mesma coisa com o segredo, colocamos aqui para o segredo. E mais uma vez, você segue esse mesmo padrão para Facebook, Twitter, et cetera, et cetera. Certo? Então, uma vez que fizermos tudo isso, o que vamos fazer é dizer configuração, configuração. E a chave que queremos seria o ID do cliente de dois pontos do Google. Então, ID do cliente de dois pontos do Google E então repetimos isso pelo segredo. Então é um dois pontos e eu fiz segredos de sequência. Então, é um segredo do cliente bu colon e só isso, que adicionamos com segurança as chaves de autenticação e os segredos são fundamentais e secretos para o nosso aplicativo? Não. Depois de adicionarmos essa configuração de autenticação e examinar o que acontece quando vamos para a tela de login. À direita, você verá que tem o serviço google para usar vermelho. Então lembre-se, quando fizemos o dinheiro, bem, os estranhos que realmente os listaram todo o Facebook, Twitter, et cetera, et cetera. Listamos o modo, sabemos que a página de login em andaimes já tinha o mecanismo, você se lembra aqui tinha um pouco de escrita sobre os provedores externos e assim por diante. Porque o que está acontecendo no arquivo ou no código por trás é que é, deixe-me encontrar rapidamente a lógica de login e obtém, está dizendo, Me dê os esquemas de autenticação externa cortesia de sand in Manager, san e monitor é realmente indo para a inicialização e dizer, existem outros esquemas definidos aqui na startup que vimos, oh sim, você tem o Google. Ok, então vamos adicionar o botão Google para você. Certo? Então, na página de login, se não houver nenhum que eles obtenham o direito ou não, liste-os. E para cada um, basta criar um botão com o nome do provedor. Isso é tudo o que realmente está acontecendo, certo? Então, às vezes, você sabe, uma briga dessas coisas e nós mesmos as vemos. Não precisamos disso, vou apenas removê-los, mas é sempre bom entender por que você vê certas coisas um certo tempo, quais configurações são necessárias para que certas coisas funcionem? E essa é certamente uma das configurações que você raramente vê. As pessoas realmente tomam o tempo ou passam passo a passo e ajudam você a entender. Então, é basicamente assim que você começaria a adicioná-los. E eu poderia tantos quanto você entrar aqui como vimos com o Twitter, Facebook, et cetera, et cetera. Tanto quanto sua corrente estiver ligada, você obterá esses botões automaticamente. Então eu só estou fazendo isso passo a passo pouco a pouco. Quando voltarmos, testaremos juntos como essa lógica de login funciona. 33. Teste o fluxo de login do Google Auth,: Tudo bem pessoal, então estamos de volta e o objetivo desta vez é verificar se nosso log, ele realmente funciona. Portanto, o primeiro passo 1 é ir para a página de login. Então, o segundo passo é clicar no botão azul. Então, quando clicamos no Google, o que você notará é que ele está navegando para longe da nossa direita. Então, estamos em localhost alguma coisa e, quando clicamos nisso, ele está realmente navegando sempre. Portanto, certifique-se de ter Internet quando estiver fazendo isso fora do curso. E está tentando ir para uma barra de dois pontos google.com login e eles estão nos dando um erro. Portanto, o erro aqui é um 400, o que significa uma solicitação incorreta. E essa é a razão pela incompatibilidade do URI de redirecionamento. Então eles te dão um pouco de leitura. E novamente, o SEO está fazendo alguma leitura só para ter certeza de que eu entendi completamente. E se você clicar em Solicitar detalhes, eles informarão, se você for o desenvolvedor, garante que esses detalhes da Solicitação estejam em conformidade com as políticas do Google. Então eles estão dando a você o que o URI de redirecionamento precisa ser, que é localhost, do qual eles sabem de onde você está vindo. Mas você precisa ter esse ponto de extremidade em sua sola. Vou copiar isso e depois vou voltar para o meu gerenciador de credenciais e aquele cliente que criamos, o mesmo com o ID do aplicativo. E o segredo, o que você quer fazer é ir até os URIs de redirecionamento autorizados. Então você vai adicionar Ury e depois colocar esse URL ou ureia, esse link. E, em seguida, clique em Salvar. E depois que isso for salvo, o que vou fazer é clicar em OK. E, em seguida, vamos clicar no Google novamente. E desta vez você vai ver que não está me pedindo para entrar com meu ícone. Então, farei exatamente isso. E depois de fornecer meu endereço de e-mail, senha e potencialmente ser desafiado por dois se for uma verificação pelo Google, não sou levado a esta página onde diz você quer associar seus cones do Google up? E então eles lhe dão o endereço de e-mail e pedem que você se registre. Agora você veria que a página navega por ela é logon externo de barra de identidade. E o URL de retorno é exatamente qualquer que seja o eixo, certo? Então essa é a página que você pode modificar. Saiba se você deseja adicionar ou permitir que o usuário adicione mais detalhes do que apenas o endereço de e-mail deles. Porque esse endereço de e-mail vai dobrar como nome de usuário e eles não terão um primeiro nome, sobrenome, etc. Concedido, você provavelmente pode ajustar as configurações um pouco mais com Google para ver obter mais informações do Google, um barco, esse usuário para que eu possa preencher meu sistema. Não vou entrar em todas essas coisas, certo? Não. Então você pode olhar para isso agora, outra coisa que você pode acabar recebendo é um desses 400 erros depois de tentar fazer login com as credenciais do Google, você pode obter a mesma página 400. Se você fizer isso, você provavelmente pode voltar aqui e apenas adicionar o URL sem essa lixar o Google apenas adicioná-lo como outro URI. Porque o que acontece é que esses URLs dizem ao Google o que meu cliente deve procurar é que deve navegar quando terminar com o Google. Então, nosso que o Google deve tentar navegar de volta para quando terminar de fazer a coisa. Então isso faz parte dessa segurança. Lembre-se quando estávamos falando sobre como configurar o registro seguro e o login, como sempre fazemos o redirecionamento, redirecionamentos locais para garantir que estamos redirecionando para uma página em nosso AP semelhante ao que o Google está tentando realizar aqui, para ver qual domínio devo procurar sempre que terminar de autenticar essa pessoa? Então você pode acabar precisando adicionar outra entrada e ela está no sangue está em Yuri. Fez lá e não salvou nenhum dano causado, leu ou escrevi algum dinheiro inteiro para nós. Depois de clicar em Registrar, precisarei confirmar os cones. Tudo bem. Sabemos que esse é o procedimento padrão, mas eu queria nos levar para o banco de dados para que possamos ver o que está acontecendo. Então, no banco de dados, você verá um novo usuário criado com o endereço de e-mail. Eu posso apenas definir isso como verdadeiro a partir daqui. E o carimbo de segurança, todas essas coisas, sem senha, nenhuma senha é necessária porque não estamos lidando com a senha desse usuário e este é um usuário do Google. Portanto, todas essas coisas que os resultados do usuário são criados, se formos com os logins de usuários ASP NET também notariam que obtemos uma nova entrada onde conhecemos o provedor, a chave do provedor, o nome de exibição e o usuário para quem esse login é atribuído. 34. Revisão de seção OAuth: Tudo bem pessoal, então nesta seção, demos uma olhada em como você pode configurar a autenticação do Google. E, por extensão, as mesmas técnicas podem ser aplicadas a outros provedores de autenticação terceirizados. Usamos apenas o Google porque talvez mais do que, provavelmente, tenha uma conta do Gmail ou uma conta do Google. E é muito mais fácil começar com isso. Ambas as técnicas podem ser aplicadas em toda a placa. Certas coisas que temos que fazer. Primeiro, temos que ir para essa plataforma de terceiros, seja o que for, seja Google ou Windows, ou Twitter ou Facebook, temos que ir lá, registrar um novo cliente da web. E isso nos daria as credenciais de chave e autenticação necessárias que precisamos para autorizar nosso aplicativo. Também precisamos autorizar URLs de redirecionamento com base em nossos endereços de domínio. E depois de fazer isso, seríamos encorajados a voltar ao nosso aplicativo e adicionar aos usuários segredos são segredos e armazenar nosso ID de cliente e segredo lá em vez de na configuração regular ou em texto sem formatação no código, certo? Então, você gostaria de adicionar esses segredos ao AP, acessá-los de acordo. Adicionamos o esquema de autenticação ou esquemas com base em quantos você tem. E depois que isso for feito, o aplicativo os renderizará automaticamente com base no código boilerplate de nossas páginas de login e registro de andaimes. Saiba depois que pudermos autenticar como titular da conta do Google, poderemos fazer login e os mesmos privilégios que um usuário comum tinha serão aplicados aqui. Não, você claramente vai ver que há certas coisas que estão faltando porque não sabemos sobre a data de nascimento, não sabemos o nome completo. Portanto, há certas informações que podemos permitir que o usuário gerencie posteriormente ou podemos transcrever do provedor terceirizado, considerando a quantidade de margem de manobra e alavancagem que eles dão. Porque existem apenas alguns pedaços de informação padrão que eles vão dar dinheiro. Então, identificador de nome, estamos recebendo isso. Claro. Bem, seu nome, endereço de e-mail, esses são provenientes do registro do usuário. E aqui vemos que isso tem um método de autenticação do Google. Se formos a logins externos, você verá o Google. Então, dados pessoais e tudo. Você provavelmente gostaria de permitir que eles gerenciem essas coisas em seu perfil em termos de dinheiro. Então, número de telefone, você pode adicionar nome, sobrenome, data de nascimento. Então eu carrego essa pessoa autenticada de terceiros para criar seus cones, mas depois preencha os detalhes depois. Então, há várias maneiras, como eu disse, não é um tamanho único. Você precisa encontrar a tetania que funciona para você e seus usuários e sua situação. Dito isso, porém, configuramos com sucesso a autenticação do Google em nosso dotnet Core. 35. CONCLUSÃO: Tudo bem pessoal, então chegamos a outro marco e concluímos este curso. Este curso ensinou a implementar autenticação e autorização em seu aplicativo dotnet Core. Não só ensinou como fazer isso, porque a realidade é que podemos realmente obter todo esse recurso pronto para uso no nível mais básico. Mas exploramos os prós e contras de como todas as peças se encaixam para nos dar uma boa aplicação segura. Também analisamos o fato de que você precisa ter cuidado ao equilibrar as medidas de segurança com usabilidade, porque então você pode tornar seu AP tão seguro que dificilmente é utilizável. E por outro lado, você não quer que ele seja muito utilizável, mas não muito seguro. Então você sempre quer levar essas coisas em consideração. É sempre uma coisa a fazer. Um tutorial ou um curso em que estamos ensinando a construir esse sistema e polvilhar um pouco desse e daquele recurso. Mas é outra coisa quando você se senta e olha para esse conjunto de recursos e essa biblioteca em sua totalidade e aprecia plenamente todas as complexidades que podem orientá-lo com suas considerações de desenvolvimento e design daqui para frente. Neste curso, praticamente esgotamos o básico. E analisamos os fundamentos e analisamos algumas coisas avançadas que olhamos para que você possa estender o que sai da caixa. Veremos como você pode aproveitar o que sai da caixa e como todas essas coisas se encaixam. Então, quero agradecer por ficar comigo nesta jornada. E espero que você possa pegar o que aprendeu com este curso e crie um belo aplicativo seguro para você e seus usuários.