Obter um Token OAuth 2.0 com C#

Visão Geral

OAuth 2 é um protocolo de autorização que permite que uma aplicação se autentique em outra. Para que isso aconteça, uma aplicação pede permissão de acesso para um usuário, sem que para isso ela tenha acesso a alguma senha dele.

Neste tópico, vamos descobrir como fazer uma requisição de geração do token de acesso deste protocolo, usando C# no Formulário.

Formulário

Crie um Formulário, adicione um campo chamado “access_token” e um botão.

Código C#

Adicione no evento Click do botão uma chamada para a ação “Executar Código C#”.

Utilize o código C# a seguir:

using System;
using System.IO;
using System.Reflection;
using System.Net;
using System.Net.Http;
using Newtonsoft.Json;

// Substitua esses valores pelos dados do seu provedor OAuth 2.0
string tokenEndpoint = "seu_token_endpoint";
string clientId = "seu_client_id";
string clientSecret = "seu_client_secret";
string username = "seu_username";
string password = "sua_senha";
string scope = "seu_escopo";

using (HttpClient client = new HttpClient())
{
    // Crie os parâmetros do form-data
    var formData = new FormUrlEncodedContent(new[]
    {
        new KeyValuePair<string, string>("grant_type", "password"),
        new KeyValuePair<string, string>("username", username),
        new KeyValuePair<string, string>("password", password),
        new KeyValuePair<string, string>("client_id", clientId),
        new KeyValuePair<string, string>("client_secret", clientSecret),
        new KeyValuePair<string, string>("scope", scope)
    }); 

    // Faça a solicitação POST para o endpoint do tokena
    var response = client.PostAsync(tokenEndpoint, formData).Result;

    // Garanta que a solicitação foi bem-sucedida
    response.EnsureSuccessStatusCode();

    // Leia o resultado da requisição
    var result = response.Content.ReadAsStringAsync().Result;
    
    // Deserialize o JSON usando a biblioteca NewtonSoft usando "dynamic"
    var tokenResult = JsonConvert.DeserializeObject<dynamic>(result);

    // Preencha o campo com o valor da propriedade "access_token" do JSON.
    Fields["access_token"].Value = (string)tokenResult.access_token;
}
Para utilizar as referências das bibliotecas "Newtonsoft.Json" e "System.Net.Http" é necessário atualizar o Latromi Client para a versão 3.5.347 (ou superior).

O Formulário não permite a execução arbitrária de código C# assíncrono (async), portanto não é possível usar o padrão "await Taskable".

Ao invés disso, execute a versão síncrona do método chamando a propriedade “.Result” do método Taskable.

Você pode observar este comportamento nas chamadas dos métodos “client.PostAsync” e “response.Content.ReadAsStringAsync()”.

2 curtidas

@daniel.giacomelli; Me corrija se estiver errado, mas essa funcionalidade estaria atrelado a essa solicitação aqui: Autenticação de 2 fatores - Recursos - LATROMI Community ?

Oi @josimar.picoloto!
O assunto é parecido, mas não é o mesmo.
Aqui estamos apenas fazendo a autenticação em um sistema que utiliza o protocolo OAuth 2.0, usando C#. Este processo é comum para integração através de consumo de WebAPI.

Ah perfeito!
Obrigado

1 curtida