Primeiras aulas do curso Certificação C# Programming parte 12: Validar Segurança

Certificação C# Programming parte 12: Validar Segurança

Validar Dados JSON - Introdução

Olá! Eu sou Marcelo Oliveira, bem-vindos a mais um curso aqui na Alura, o curso Certificação 70-483 Programação em C#. A gente vai ver na parte 12 a validação de segurança, começando com a validação da entrada de um aplicativo.

Vamos começar com a validação de dados JSON, por exemplo, você recebe uma string JSON e você vai converter essa string em um objeto. Em vez de fazer a conversão para o objeto diretamente, você precisa primeiro validar para ver se essa string está no formato JSON adequado.

Depois, nós vamos ver como escolher o tipo de coleção adequada. Então, o .NET fornece uma série coleções diferentes, como a lista, o array, a pilha, a fila e outras que podem ser utilizados numa aplicação.

A gente vai ver os cenários que são adequados para cada tipo de coleção. A gente vai ver também como gerenciar a integridade de dados. Então, se você tem uma classe, por exemplo, ContaCorrente, você vai poder fazer depósito e saque a partir dessa conta corrente.

Porém, o saque é limitado com relação ao valor do saldo atual. Então, você pode ter uma informação inválida na sua conta corrente, se você permitir o saque maior do que o saldo. Então, para garantir isso, você utiliza validações para garantir a integridade da sua aplicação.

Então, a gente vai aprender também a validação utilizando expressões regulares, que é um tipo de validação bastante poderosa, que utiliza uma linguagem própria para poder garantir a validação dos dados de entrada.

Como, por exemplo, um formulário da internet, que você vai digitando os valores, você digita valores do tipo moeda, ou então, uma data de nascimento... Tudo isso precisa passar por uma validação.

A gente vai ver como aplicar expressão regular para validar, tanto a entrada de dados na interface do usuário como lá atrás, na validação do back-end, antes de gravar isso no banco de dados.

A gente vai aprender também a utilizar as funções internas para validar tipos e conteúdos. Por exemplo, as funções Parse e TryParse, que existem nos tipos primitivos do .NET, principalmente, nos tipos numéricos: inteiro, decimal, etc.

Todos eles têm funções internas para validar os conteúdos que foram digitados por um usuário. A gente vai ver também a criptografia. E no .NET, nós vamos ver tanto a criptografia simétrica quanto a criptografia assimétrica.

E elas vão variar de acordo com o tipo de chave que você utiliza. Então, se você usa uma chave única para todas as situações, você está trabalhando com a criptografia simétrica, utilizando o padrão AES, por exemplo.

E a gente vai ver com a criptografia assimétrica, o uso de um par de chaves: a chave privada e a chave pública. E a gente vai ver também como garantir que a pessoa, ou a empresa, ou o aplicativo externo com o qual a gente está se comunicando...

A gente vai garantir que essa outra parte da comunicação é a pessoa ou a empresa que ela diz ser, através do certificado. Então, o certificado garante que a gente não está falando com espiã, com hacker. A gente está se comunicando com uma empresa idônea.

E a gente vai ver como utilizar código C# para garantir a validação através de certificados. A gente também vai aprender a gerenciar a chave, guardando-a num lugar seguro, através dos provedores de criptografia do .NET.

A gente também vai aprender a fazer o hash de dados, utilizando tanto o método GetHashCode da classe Objeto do .NET, como através das classes específicas de criptografia do .NET.

E, lá no final, a gente vai aprender a criptografar fluxos, que é a transição entre um fluxo que obtém uma mensagem ou documento aberto, que não está protegido...

E a gente vai transformar isso num fluxo protegido criptografado através de um processo chamado de CryptoStream, que é um objeto, que é um criptografador ou um codificador de fluxos.

Então, é isso. A gente espera que vocês gostem desse curso. Muito obrigado e até logo.

Validar Dados JSON - O formato JSON

Esta é a primeira aula da parte 12 do nosso curso de certificação. Nós vamos começar trabalhando com esta solução 'certificação-csharp-pt12' que está aberta no Visual Studio. Este código já é fornecido para vocês como parte do curso, como uma atividade para vocês baixarem e abrirem no Visual Studio para poder acompanhar.

Então, esta solução tem duas pastas principais, que são a pasta antes - código do aluno, e a pasta depois - código do instrutor. Enquanto eu vou desenvolver o curso a partir da pasta depois, vocês vão acompanhar e vão colocar a mão na massa trabalhando com a pasta antes - código do aluno. Então, nós vamos começar com a pasta Item01 - Validar dados JSON.

Lá dentro, nós temos o Program01.01, e aqui dentro, o arquivo Program.cs. Nós vamos abrir esse programa, que contém o código para a gente poder desenvolver esta aula. Então, nós estamos trabalhando com a validação de dados JSON. E para começar a trabalhar com este formato JSON, a gente vai apresentar a classe Filme.

Essa classe, que é uma classe C# possui algumas informações, como o nome do diretor do filme (Diretor), o nome do título (Título) e também a duração do filme em minutos (DuracaoMinutos). Nós já trabalhamos com essa classe Filme anteriormente em outras partes do curso e nós vamos aproveitar e trabalhar com ela.

Aqui embaixo, nós temos o código do programa em si. Esse programa vai começar criando um objeto do tipo Filme, como nós podemos ver aqui... Então, o que a gente vai fazer é tirar os comentários do código para poder executá-lo passo a passo, para a gente não precisar digitar muitas linhas, porque isso é apenas uma revisão.

Então, eu vou "descomentar" esse primeiro bloco de código, onde nós temos a declaração de um objeto Filme, contendo informações como o diretor, o título (título) e a duração em minutos (duracaoMinutos). Em seguida, a gente vai querer transformar esse objeto em uma string no formato JSON.

E para isso, existe uma biblioteca bastante popular no .NET, que é a biblioteca Newtonsoft.Json... Nós vamos "descomentar" o próximo bloco, onde nós temos a declaração de uma string JSON que vai obter o objeto Filme que foi declarado acima, e que vai ser convertido numa string JSON a partir da classe JsonConvert.

Essa classe faz parte da biblioteca Newtonsoft.Json e ela precisa ser instalada para a gente poder trabalhar com ela. Então, como essa biblioteca não é nativa do .NET, nós precisamos instalar com o instalador do NuGet. Então, para isso, vamos abrir a solução e localizar o Program01.01, e aqui, eu vou clicar com o botão direito em cima do Program01.01 e vou escolher a opção do menu Gerenciar Pacotes do NuGet (Manage NuGet Packages).

Com isso, a gente vai ter uma nova janela, onde nós vamos digitar o nome da biblioteca Newtonsoft.Json... E aqui está a biblioteca criada por James Newton King, que é bastante popular... A gente vai instalar, então, clicando no botão direito do instalador do NuGet, já tem a versão selecionada, a última versão estável... Vamos, então, instalar essa biblioteca.

Então, ele acabou de instalar para a gente... Vamos voltar para o programa, onde nós temos a classe JsonConvert que vai ser usada para fazer a serialização do objeto em um formato JSON. Para a gente poder trabalhar com essa classe, nós precisamos importar o namespace... Para isso, a gente pode teclar Ctrl e a tecla ponto, Ctrl + . vai me dar acesso ao menu...

E entre as opções do menu, eu vou escolher a importação do namespace Newtonsoft.Json. Então, ele acabou de importar para mim esse namespace, e eu consigo agora transformar o meu objeto em uma string JSON. Vamos rodar a aplicação com F5... E aí está a string que foi criada a partir do nosso objeto Filme.

Então, nós temos as três propriedades, que são o Diretor, James Cameron... Nós temos o Titulo, Titanic e a duração em minutos (DuracaoMinutos) que é 194. Nós vamos parar a aplicação e vamos prosseguir agora com o próximo trecho de código, onde nós temos a declaração de um outro objeto Filme que vai ser criado a partir dessa string JSON que foi gerada.

Então, nós vamos "descomentar" esse bloco de código com as teclas Ctrl + K + U e eu tenho a declaração de um Filme em uma variável chamada filmeConvertido, e a partir da biblioteca Newtonsoft.Json com a classe JsonConvert, eu consigo desserializar o objeto utilizando como parâmetro a string JSON, a variável json que foi gerada, especificando que eu quero converter para o tipo Filme.

E em seguida, nós vamos mostrar no console os dados do objeto Filme que foi gerado a partir dessa string. Eu vou rodar a aplicação e nós vamos ver agora os dados objeto que estão sendo exibidos aqui... James Cameron, Titanic, 194 minutos. E como esses dados foram exibidos no console a partir do nosso objeto?

Eu estou usando o console WriteLine e passando, simplesmente, o nome da variável filmeConvertido. Como o objeto sabe que ele precisa exibir esses dados? Ele sabe porque a classe Filme, aqui em cima, já possui um override, ela possui uma sobrecarga em cima do método ToString para poder formatar o retorno. Então, eu tenho a concatenação do Diretor + Titulo + DuracaoMinutos.

Continuando, nós temos o filmeConvertido que foi exibido e o próximo passo é trabalhar com uma coleção de filmes. Então, nós vamos começar "descomentando" a linha onde nós declaramos uma nova coleção... Essa coleção é uma lista de filmes. Essa lista de filmes é armazenada numa variável chamada coletaneaJamesCameron, ou seja, uma lista de filmes com esse diretor.

E nós vamos descomentar, então, o próximo bloco de código, onde nós declaramos três filmes... As variáveis filme1, filme2 e filme3 possuem informações sobre os filmes do James Cameron. Eles são: Titanic, Avatar e O Exterminador do Futuro. E depois desse bloco de código, nós temos a geração de uma string JSON, utilizando também a biblioteca Newtonsoft.Json, só que dessa vez, nós vamos gerar uma uma string JSON a partir de uma coleção.

Nós vamos "descomentar" esse bloco de código também e vamos rodar a aplicação. Agora, nós temos uma nova string JSON com o formato um pouco diferente, contendo uma coleção de filmes. Temos o Titanic, depois nós temos o Avatar, e lá no final, nós temos O Exterminador do Futuro.

Continuando... Agora, nós vamos para o próximo passo, que é gerar uma lista de filmes, porém, de um tipo diferente. Nós já vimos o tipo Filme, vamos ver agora uma outra classe chamada FilmeSimples que está declarada no código, no final do nosso arquivo. A classe FilmeSimples é muito parecida com a classe Filme, com a diferença de que ela não tem a propriedade da duração em minutos.

Então, nós vamos utilizar FilmeSimples para declarar uma coleção de filmes chamada filmesSimples. Vamos "descomentar", então, esse último bloco do nosso código. E aqui, esse bloco faz a declaração de uma lista de FilmeSimples, desserializando os objetos a partir da string arrayJson que foi gerada a partir daquela lista de filmes, contendo filme1, filme2 e filme3.

Só que nós vamos gerar uma lista de filmes de uma outra classe, que é FilmeSimples. Então, nós vamos agora rodar a aplicação e vamos ver os dados que foram obtidos a partir da conversão de uma string, que é um array de objetos em uma coleção de objetos da classe FilmeSimples.

Então, aqui nós vemos a demonstração do formato JSON, que significa notação de objeto JavaScript, que é um formato muito popular e tem muitas vantagens... Entre elas, a facilidade de ser lido tanto pelo computador como também por humanos. Então, nós temos um formato bastante enxuto, como nós podemos ver, e o primeiro objeto que nós utilizamos para converter para JSON é o objeto Filme...

E nós podemos ver que esse objeto, ou melhor, o formato JSON é delimitado sempre por chaves... Ele começa com chaves, e lá no final, ele termina também com chaves. E dentro desse objeto, dentro dessa string, nós vamos encontrar valores que são delimitados por vírgula. Então, nós temos uma vírgula aqui e uma outra vírgula aqui.

E entre essas vírgulas, nós vamos encontrar pares que são chave e valor. Então, o formato é sempre: o Nome, que é o nome do atributo, seguido de dois pontos (:), seguido de uma string ou de um valor. Então, nós temos a representação da propriedade Diretor e do valor string dessa propriedade, que é James Cameron.

Temos o nome da propriedade Titulo e o valor da string, que é Titanic... E no final, nós temos o valor... Ou melhor, o nome da propriedade DuracaoMinutos e o valor dessa propriedade numérica que é 194. Porém, nós temos uma limitação no JSON, que é o fato de que os nomes, esses nomes que nós estamos vendo, que representam as propriedades, eles não possuem o tipo...

Então, isso fica sob responsabilidade de quem vai manipular, de quem vai receber esses dados, conhecer o tipo de cada nome. Uma outra peculiaridade do JSON é que também ele pode ser delimitado entre colchetes, como nós estamos vendo nesta linha. Nós temos uma string JSON que foi gerada a partir de uma coleção de objetos.

Por isso, a string JSON começa com a abertura de um colchete, e lá no final, nós temos o fechamento de colchetes também. E entre esses colchetes, nós temos cada um dos objetos que são delimitados, por sua vez, por chaves. E entre cada objeto, nós temos um separador de vírgula.

Então, isso é tudo o que você precisa saber sobre o JSON, sobre esse formato que é bastante utilizado. Daqui para frente, a gente vai aprender a validar a entrada de dados, trabalhando com formato JSON.

Validar Dados JSON - O formato XML

Nós vimos como o formato JSON é bastante flexível e fácil de ser lido. E agora, vamos para o Program01.02, onde nós vamos ver um outro formato bastante popular, que é o formato XML.

Vamos abrir o Program01.02, a classe Program que está no arquivo Program.cs. Lá dentro, nós vamos ter um código inicial para este vídeo, e esse código está comentado da mesma forma que o código do vídeo anterior.

E aqui, nós temos um código que vai começar declarando uma instância da classe Filme e atribuindo esse valor a uma variável do tipo filme. E essa variável se chama filme e vai armazenar, então, um filme chamado A Fantástica Fábrica de Chocolate.

Vamos tirar o comentário desse código, que declara a variável filme e, em seguida, nós vamos ver como esse objeto filme vai ser transformado em um formato string, em um formato XML.

O próximo passo é declarar um serializador XML, da classe XmlSerializer, que faz parte do .NET. Ou seja, ela é uma classe nativa, não é necessário instalar nenhum pacote do NuGet para trabalhar com ela.

Esse serializador vai transformar o objeto Filme em uma string, utilizando como veículo, como transporte, um escritor de texto, que é a classe TextWriter, que está declarada nesta linha.

Então, esse escritor de texto foi declarado como um escritor de string, ou seja, um StringWriter... E aqui, nós temos a serialização que é feita a partir do nosso serializador XmlSerializer. [02:25] E em seguida, nós precisamos fechar esse escritor de texto, utilizando o método Close. Na próxima linha, nós temos a declaração de uma variável xml, e essa variável vai obter o texto gerado pelo escritor, que é o TextWriter.

E lá no final, nós vamos ter, então, a impressão no console a partir da string xml que foi gerada a partir do filme. Então, se nós rodarmos essa aplicação, nós vamos ver o texto gerado a partir do objeto Filme, só que desta vez, não mais no formato JSON, mas sim no formato XML.

Esse formato começa com um cabeçalho, indicando a versão do XML e a codificação dos caracteres, que é o formato utf-16... E depois, nós temos algumas tags. Essas tags representam informações diferentes.

Por exemplo, neste nível, nós temos o nome da classe Filme. Porém, aqui dentro, entre as tags de abertura e fechamento do filme, nós temos informações das propriedades do filme, que são: o diretor (Diretor), o título (Titulo) e a duração em minutos (DuracaoMinutos).

Então, com o formato XML, nós temos um texto um pouco mais elaborado, um pouco mais pesado. Como nós podemos ver, esse texto XML contém mais caracteres, ele é maior.

E, portanto, isso acabou fazendo com que muitos sistemas deixassem um pouco de lado o XML para trabalhar com o JSON, que é um formato mais enxuto. Porém, o formato XML é mais poderoso, ele permite que você trabalhe com mais metadados.

Ou seja, você poderia trabalhar com informações, como por exemplo, o tipo de cada propriedade. Você poderia ter aqui metadados, indicando que o diretor e o título são tipo string, e que a duração em minutos é um tipo inteiro.

Então, nós vamos continuar com o nosso código para mostrar como converter de volta a string xml gerada, em um outro objeto do tipo Filme.

Vamos primeiro ver que é necessário criar um leitor de texto, que nós temos como a variável reader, e esse leitor vai ser utilizado no processo de desserialização. Ou seja, transformar uma string em objeto.

Então, para isso, nós declaramos aqui uma nova variável do tipo Filme, chamada filme2... Essa variável filme2 é desserializada pelo serializador através do método Deserialize, que vai consumir o nosso leitor de texto, que foi criado a partir da string xml...

E o nosso serializador vai desserializar essa string com um tipo, que é o filme, que é a classe Filme. E, no final de tudo, nós temos o último bloco de código, que vai exibir os dados do objeto Filme, que está armazenado na variável filme2.

Quando nós rodarmos a aplicação, vamos ver, então, os dados do objeto Filme que foram gerados a partir da string xml, contendo as informações: o nome do diretor, o nome do filme e, no final, a duração do filme em minutos.

Sobre o curso Certificação C# Programming parte 12: Validar Segurança

O curso Certificação C# Programming parte 12: Validar Segurança possui 282 minutos de vídeos, em um total de 59 atividades. Gostou? Conheça nossos outros cursos de .NET em Programação, ou leia nossos artigos de Programação.

Matricule-se e comece a estudar com a gente hoje! Conheça outros tópicos abordados durante o curso:

Aprenda .NET acessando integralmente esse e outros cursos, comece hoje!

  • 1112 cursos

    Cursos de programação, UX, agilidade, data science, transformação digital, mobile, front-end, marketing e infra.

  • Certificado de participação

    Certificado de que assistiu o curso e finalizou as atividades

  • App para Android e iPhone/iPad

    Estude até mesmo offline através das nossas apps Android e iOS em smartphones e tablets

  • Projeto avaliado pelos instrutores

    Projeto práticos para entrega e avaliação dos professores da Alura com certificado de aprovação diferenciado

  • Acesso à Alura Start

    Cursos de introdução a tecnologia através de games, apps e ciência

  • Acesso à Alura Língua

    Reforço online de inglês e espanhol para aprimorar seu conhecimento

Premium

  • 1112 cursos

    Cursos de programação, UX, agilidade, data science, transformação digital, mobile, front-end, marketing e infra.

  • Certificado de participação

    Certificado de que assistiu o curso e finalizou as atividades

  • App para Android e iPhone/iPad

    Estude até mesmo offline através das nossas apps Android e iOS em smartphones e tablets

  • Projeto avaliado pelos instrutores

    Projeto práticos para entrega e avaliação dos professores da Alura com certificado de aprovação diferenciado

  • Acesso à Alura Start

    Cursos de introdução a tecnologia através de games, apps e ciência

  • Acesso à Alura Língua

    Reforço online de inglês e espanhol para aprimorar seu conhecimento

12X
R$75
à vista R$900
Matricule-se

Premium Plus

  • 1112 cursos

    Cursos de programação, UX, agilidade, data science, transformação digital, mobile, front-end, marketing e infra.

  • Certificado de participação

    Certificado de que assistiu o curso e finalizou as atividades

  • App para Android e iPhone/iPad

    Estude até mesmo offline através das nossas apps Android e iOS em smartphones e tablets

  • Projeto avaliado pelos instrutores

    Projeto práticos para entrega e avaliação dos professores da Alura com certificado de aprovação diferenciado

  • Acesso à Alura Start

    Cursos de introdução a tecnologia através de games, apps e ciência

  • Acesso à Alura Língua

    Reforço online de inglês e espanhol para aprimorar seu conhecimento

12X
R$100
à vista R$1.200
Matricule-se

Max

  • 1112 cursos

    Cursos de programação, UX, agilidade, data science, transformação digital, mobile, front-end, marketing e infra.

  • Certificado de participação

    Certificado de que assistiu o curso e finalizou as atividades

  • App para Android e iPhone/iPad

    Estude até mesmo offline através das nossas apps Android e iOS em smartphones e tablets

  • Projeto avaliado pelos instrutores

    Projeto práticos para entrega e avaliação dos professores da Alura com certificado de aprovação diferenciado

  • Acesso à Alura Start

    Cursos de introdução a tecnologia através de games, apps e ciência

  • Acesso à Alura Língua

    Reforço online de inglês e espanhol para aprimorar seu conhecimento

12X
R$120
à vista R$1.440
Matricule-se
Procurando planos para empresas?
Acesso por 1 ano
Estude 24h/dia onde e quando quiser
Novos cursos toda semana