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;
}
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()”.