AYUDA .NET

C# OAuth2 (Cómo funciona para desarrolladores)

Actualizado 6 de marzo, 2024
Compartir:

OAuth2 es un potente protocolo para proteger sus aplicaciones web mediante la autenticación y autorización de usuarios. En el ámbito del desarrollo en C#, comprender OAuth2 puede mejorar enormemente la seguridad y funcionalidad de sus aplicaciones.

Esta guía está pensada para principiantes, con especial atención a los conceptos clave, ejemplos prácticos y explicaciones fáciles de entender. También aprenderemos un caso de uso para utilizar OAuth2 con la aplicación IronPDF biblioteca.

Comprender OAuth2 y su importancia

C# OAuth2 (Cómo funciona para desarrolladores): Figura 1 - Página web de OAuth2

OAuth2 es un protocolo que permite a una aplicación cliente solicitar acceso a recursos alojados en un servidor de autorización, en nombre de un usuario. Es un método habitual para gestionar la autenticación y autorización de usuarios en las aplicaciones web modernas.

El objetivo principal de OAuth2 es proporcionar un acceso seguro y eficaz a los recursos sin compartir las credenciales del usuario. (como nombre de usuario y contraseña) directamente con la aplicación cliente.

Conceptos clave de OAuth2

Antes de sumergirnos en la implementación, aclaremos algunos términos esenciales de OAuth2:

  • Aplicación cliente: La aplicación que solicita acceso a la cuenta del usuario.
  • Servidor de autorización: El servidor que autentica al usuario y emite tokens de acceso a la aplicación cliente.
  • Token de acceso: Token que concede a la aplicación cliente acceso a la cuenta del usuario durante un tiempo limitado.
  • Token de actualización: Token utilizado para obtener un nuevo token de acceso cuando el actual caduca sin requerir de nuevo las credenciales del usuario.
  • Identificación del cliente y Secreto del cliente: Credenciales que identifican la aplicación cliente ante el servidor de autorización.
  • URI de redireccionamiento: URI que el servidor de autorización enviará al usuario tras conceder o denegar el acceso a la aplicación cliente.
  • Flujo de códigos de autorización: Método seguro en el que la aplicación cliente recibe un código de autorización como paso intermedio antes de intercambiarlo por un token de acceso.

Implementación de OAuth2 en C#: Un ejemplo básico

Vamos a crear una aplicación sencilla en C# que utilice OAuth2 para la autenticación de usuarios. Este ejemplo le guiará a través de la configuración de un cliente OAuth2, la obtención de un token de acceso y la realización de una solicitud a un recurso protegido.

Configuración del cliente OAuth2

En primer lugar, debe registrar su aplicación C# en el servidor de autorización OAuth2. Este proceso varía en función del servidor, pero normalmente recibirás un ID de cliente y un secreto de cliente, que son cruciales para el flujo de OAuth2.

Paso 1: Defina las credenciales de su aplicación

Como primer paso, configure sus credenciales de cliente como ID de cliente y Secretos de cliente. Este es el código de ejemplo:

class Program
{
    private static string clientId = "your-client-id";
    private static string clientSecret = "your-client-secret";
    private static string redirectUri = "your-redirect-uri";
    static void Main(string [] args)
    {
        //  La implementación de OAuth2 irá aquí
    }
}
class Program
{
    private static string clientId = "your-client-id";
    private static string clientSecret = "your-client-secret";
    private static string redirectUri = "your-redirect-uri";
    static void Main(string [] args)
    {
        //  La implementación de OAuth2 irá aquí
    }
}
Friend Class Program
	Private Shared clientId As String = "your-client-id"
	Private Shared clientSecret As String = "your-client-secret"
	Private Shared redirectUri As String = "your-redirect-uri"
	Shared Sub Main(ByVal args() As String)
		'  La implementación de OAuth2 irá aquí
	End Sub
End Class
VB   C#

Paso 2: Solicitar la autorización del usuario

Para iniciar el flujo OAuth2, redirija al usuario al punto final de autorización del servidor de autorización. He aquí cómo construir la URL para la solicitud de autorización:

static void Main(string [] args)
{
    var authorizationEndpoint = "https://authorization-server.com/auth";
    var responseType = "code";
    var scope = "email profile";
    var authorizationUrl = $"{authorizationEndpoint}?response_type={responseType}&client_id={clientId}&redirect_uri={redirectUri}&scope={scope}";
    //  Redirigir al usuario a authorizationUrl
}
static void Main(string [] args)
{
    var authorizationEndpoint = "https://authorization-server.com/auth";
    var responseType = "code";
    var scope = "email profile";
    var authorizationUrl = $"{authorizationEndpoint}?response_type={responseType}&client_id={clientId}&redirect_uri={redirectUri}&scope={scope}";
    //  Redirigir al usuario a authorizationUrl
}
Shared Sub Main(ByVal args() As String)
	Dim authorizationEndpoint = "https://authorization-server.com/auth"
	Dim responseType = "code"
	Dim scope = "email profile"
	Dim authorizationUrl = $"{authorizationEndpoint}?response_type={responseType}&client_id={clientId}&redirect_uri={redirectUri}&scope={scope}"
	'  Redirigir al usuario a authorizationUrl
End Sub
VB   C#

Paso 3: Gestión de la respuesta de autorización

Después de que el usuario conceda o deniegue el permiso, el servidor de autorización lo redirige de vuelta a su aplicación con un código de autorización o un mensaje de error. Debe capturar este código a partir de los parámetros de consulta del URI de redirección.

Paso 4: Canjear el código de autorización

Ahora, cambiarás el código de autorización por un token de acceso. Esto requiere una solicitud POST al punto final de token del servidor de autorización.

public static async Task<string> ExchangeAuthorizationCodeForAccessToken(string authorizationCode)
{
    var tokenEndpoint = "https://authorization-server.com/token";
    var postData = $"grant_type=authorization_code&code={authorizationCode}&redirect_uri={redirectUri}&client_id={clientId}&client_secret={clientSecret}";
    var data = Encoding.ASCII.GetBytes(postData);
    var request = WebRequest.Create(tokenEndpoint);
    request.Method = "POST";
    request.ContentType = "application/x-www-form-urlencoded";
    request.ContentLength = data.Length;
    using (var stream = request.GetRequestStream())
    {
        stream.Write(data, 0, data.Length);
    }
    var response = (HttpWebResponse)request.GetResponse();
    var responseString = new StreamReader(response.GetResponseStream()).ReadToEnd();
    //  Extraer el token de acceso de la respuesta
    var token = ExtractAccessTokenFromResponse(responseString);
    return token;
}
public static async Task<string> ExchangeAuthorizationCodeForAccessToken(string authorizationCode)
{
    var tokenEndpoint = "https://authorization-server.com/token";
    var postData = $"grant_type=authorization_code&code={authorizationCode}&redirect_uri={redirectUri}&client_id={clientId}&client_secret={clientSecret}";
    var data = Encoding.ASCII.GetBytes(postData);
    var request = WebRequest.Create(tokenEndpoint);
    request.Method = "POST";
    request.ContentType = "application/x-www-form-urlencoded";
    request.ContentLength = data.Length;
    using (var stream = request.GetRequestStream())
    {
        stream.Write(data, 0, data.Length);
    }
    var response = (HttpWebResponse)request.GetResponse();
    var responseString = new StreamReader(response.GetResponseStream()).ReadToEnd();
    //  Extraer el token de acceso de la respuesta
    var token = ExtractAccessTokenFromResponse(responseString);
    return token;
}
Public Shared Async Function ExchangeAuthorizationCodeForAccessToken(ByVal authorizationCode As String) As Task(Of String)
	Dim tokenEndpoint = "https://authorization-server.com/token"
	Dim postData = $"grant_type=authorization_code&code={authorizationCode}&redirect_uri={redirectUri}&client_id={clientId}&client_secret={clientSecret}"
	Dim data = Encoding.ASCII.GetBytes(postData)
	Dim request = WebRequest.Create(tokenEndpoint)
	request.Method = "POST"
	request.ContentType = "application/x-www-form-urlencoded"
	request.ContentLength = data.Length
	Using stream = request.GetRequestStream()
		stream.Write(data, 0, data.Length)
	End Using
	Dim response = CType(request.GetResponse(), HttpWebResponse)
	Dim responseString = (New StreamReader(response.GetResponseStream())).ReadToEnd()
	'  Extraer el token de acceso de la respuesta
	Dim token = ExtractAccessTokenFromResponse(responseString)
	Return token
End Function
VB   C#

Esta función envía una solicitud POST al punto final de token con los datos necesarios y devuelve el token de acceso extraído de la respuesta.

Paso 5: Realizar solicitudes autorizadas

Con el token de acceso, ya puede realizar solicitudes a recursos que requieran autenticación. Adjunte el token de acceso a sus peticiones en la cabecera de autorización como token Bearer.

public static async Task<string> MakeAuthorizedRequest(string accessToken, string apiUrl)
{
    var request = WebRequest.Create(apiUrl);
    request.Headers.Add("Authorization", $"Bearer {accessToken}");
    var response = (HttpWebResponse)request.GetResponse();
    var responseString = new StreamReader(response.GetResponseStream()).ReadToEnd();
    return responseString;
}
public static async Task<string> MakeAuthorizedRequest(string accessToken, string apiUrl)
{
    var request = WebRequest.Create(apiUrl);
    request.Headers.Add("Authorization", $"Bearer {accessToken}");
    var response = (HttpWebResponse)request.GetResponse();
    var responseString = new StreamReader(response.GetResponseStream()).ReadToEnd();
    return responseString;
}
Public Shared Async Function MakeAuthorizedRequest(ByVal accessToken As String, ByVal apiUrl As String) As Task(Of String)
	Dim request = WebRequest.Create(apiUrl)
	request.Headers.Add("Authorization", $"Bearer {accessToken}")
	Dim response = CType(request.GetResponse(), HttpWebResponse)
	Dim responseString = (New StreamReader(response.GetResponseStream())).ReadToEnd()
	Return responseString
End Function
VB   C#

Introducción a IronPDF

C# OAuth2 (Cómo funciona para desarrolladores): Figura 2 - Página web de IronPDF

IronPDF es una biblioteca versátil para desarrolladores de C# que permite generar, manipular y representar documentos PDF directamente en aplicaciones .NET. Esta potente herramienta simplifica el trabajo con archivos PDF, facilitando la creación de documentos complejos, **Convertir HTML a PDF extraer texto de PDF y mucho más. Su sencilla API permite a los desarrolladores integrar rápidamente funciones PDF en sus aplicaciones, sin necesidad de profundos conocimientos de las especificaciones PDF.

Ejemplo de código: Generación de un PDF a partir de contenido protegido

Imagina que tienes un endpoint que devuelve contenido HTML sólo accesible para usuarios autenticados. Podría utilizar IronPDF para convertir este contenido HTML en un documento PDF, aprovechando el token de acceso obtenido mediante OAuth2.

En primer lugar, vamos a definir un método para obtener contenido HTML protegido utilizando un token de acceso:

public static async Task<string> FetchProtectedContent(string accessToken, string apiUrl)
{
    var httpClient = new HttpClient();
    httpClient.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", accessToken);
    var response = await httpClient.GetAsync(apiUrl);
    response.EnsureSuccessStatusCode();
    return await response.Content.ReadAsStringAsync();
}
public static async Task<string> FetchProtectedContent(string accessToken, string apiUrl)
{
    var httpClient = new HttpClient();
    httpClient.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", accessToken);
    var response = await httpClient.GetAsync(apiUrl);
    response.EnsureSuccessStatusCode();
    return await response.Content.ReadAsStringAsync();
}
Public Shared Async Function FetchProtectedContent(ByVal accessToken As String, ByVal apiUrl As String) As Task(Of String)
	Dim httpClient As New HttpClient()
	httpClient.DefaultRequestHeaders.Authorization = New System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", accessToken)
	Dim response = Await httpClient.GetAsync(apiUrl)
	response.EnsureSuccessStatusCode()
	Return Await response.Content.ReadAsStringAsync()
End Function
VB   C#

Ahora, vamos a utilizar IronPDF para convertir el contenido HTML obtenido en un documento PDF:

public static async Task ConvertHtmlToPdf(string accessToken, string apiUrl, string outputPdfPath)
{
    //  Obtener contenido protegido utilizando el token de acceso
    string htmlContent = await FetchProtectedContent(accessToken, apiUrl);
    //  Utilice IronPDF para convertir el contenido HTML en un documento PDF
    var renderer = new IronPdf.HtmlToPdf();
    var pdf = renderer.RenderHtmlAsPdf(htmlContent);
    //  Guardar el PDF generado en un archivo
    pdf.SaveAs(outputPdfPath);
}
public static async Task ConvertHtmlToPdf(string accessToken, string apiUrl, string outputPdfPath)
{
    //  Obtener contenido protegido utilizando el token de acceso
    string htmlContent = await FetchProtectedContent(accessToken, apiUrl);
    //  Utilice IronPDF para convertir el contenido HTML en un documento PDF
    var renderer = new IronPdf.HtmlToPdf();
    var pdf = renderer.RenderHtmlAsPdf(htmlContent);
    //  Guardar el PDF generado en un archivo
    pdf.SaveAs(outputPdfPath);
}
Public Shared Async Function ConvertHtmlToPdf(ByVal accessToken As String, ByVal apiUrl As String, ByVal outputPdfPath As String) As Task
	'  Obtener contenido protegido utilizando el token de acceso
	Dim htmlContent As String = Await FetchProtectedContent(accessToken, apiUrl)
	'  Utilice IronPDF para convertir el contenido HTML en un documento PDF
	Dim renderer = New IronPdf.HtmlToPdf()
	Dim pdf = renderer.RenderHtmlAsPdf(htmlContent)
	'  Guardar el PDF generado en un archivo
	pdf.SaveAs(outputPdfPath)
End Function
VB   C#

En el código anterior, FetchProtectedContent es responsable de recuperar el contenido HTML de un recurso protegido utilizando un token de acceso OAuth2. Una vez obtenido el contenido HTML, se pasa al renderizador HtmlToPdf de IronPDF para generar un documento PDF, que se guarda en la ruta especificada.

Conclusión

C# OAuth2 (Cómo funciona para desarrolladores): Figura 3 - Página de licencias de IronPDF

Esta guía presenta los fundamentos del uso de OAuth2 en aplicaciones C#, cubriendo conceptos clave, terminología y un ejemplo de implementación sencillo. OAuth2 desempeña un papel vital en la seguridad de las aplicaciones web al gestionar de forma eficiente la autenticación y autorización de usuarios. Aunque este ejemplo muestra el flujo de código de autorización, OAuth2 admite otros flujos adecuados para distintos tipos de aplicaciones.

Mediante la integración IronPDF Los desarrolladores de C# pueden ampliar las capacidades de sus aplicaciones para incluir la generación y manipulación de PDF, enriqueciendo las funciones disponibles para los usuarios autenticados. La facilidad de uso de IronPDF y sus completas funciones de manipulación de PDF lo convierten en una herramienta excelente para los desarrolladores .NET que deseen trabajar con archivos PDF en sus proyectos. Ofrece una **Prueba gratuita para probar todas las funciones. Y su licencia empieza por $749.

< ANTERIOR
C# WebRTC (Cómo funciona para desarrolladores)
SIGUIENTE >
Operador C# (Cómo funciona para desarrolladores)

¿Listo para empezar? Versión: 2024.7 recién publicada

Descarga gratuita de NuGet Descargas totales: 9,974,197 Ver licencias >
123