.NET-HILFE

C# OAuth2 (Wie es für Entwickler funktioniert)

Veröffentlicht 6. März 2024
Teilen Sie:

OAuth2 ist ein leistungsfähiges Protokoll zur Sicherung Ihrer Webanwendungen durch Benutzerauthentifizierung und -autorisierung. Im Bereich der C#-Entwicklung kann das Verständnis von OAuth2 die Sicherheit und Funktionalität Ihrer Anwendungen erheblich verbessern.

Dieser Leitfaden ist auf Anfänger zugeschnitten und konzentriert sich auf die wichtigsten Konzepte, praktische Beispiele und leicht verständliche Erklärungen. Wir lernen auch einen Anwendungsfall für die Verwendung von OAuth2 mit dem IronPDF bibliothek.

Verständnis von OAuth2 und seiner Wichtigkeit

C# OAuth2 (Wie es für Entwickler funktioniert): Abbildung 1 - OAuth2-Webseite

OAuth2 ist ein Protokoll, mit dem eine Client-Anwendung im Namen eines Benutzers den Zugriff auf Ressourcen anfordern kann, die von einem Autorisierungsserver gehostet werden. Es ist eine gängige Methode zur Handhabung der Benutzerauthentifizierung und -autorisierung in modernen Webanwendungen.

Das Hauptziel von OAuth2 ist es, einen sicheren und effektiven Zugang zu Ressourcen zu ermöglichen, ohne die Anmeldedaten des Benutzers weiterzugeben (wie Benutzernamen und Passwort) direkt mit der Client-Anwendung.

Schlüsselkonzepte in OAuth2

Bevor wir uns mit der Implementierung befassen, sollten wir einige grundlegende OAuth2-Terminologie klären:

  • Client-Anwendung: Die Anwendung, die den Zugriff auf das Konto des Benutzers beantragt.
  • Autorisierungsserver: Der Server, der den Benutzer authentifiziert und Zugriffstoken für die Client-Anwendung ausstellt.
  • Zugangs-Token: Ein Token, das der Client-Anwendung für eine begrenzte Zeit Zugriff auf das Benutzerkonto gewährt.
  • Refresh Token: Ein Token, der verwendet wird, um ein neues Zugangstoken zu erhalten, wenn das aktuelle abläuft, ohne dass die Anmeldedaten des Benutzers erneut benötigt werden.
  • Client ID und Client Secret: Anmeldeinformationen, die die Client-Anwendung gegenüber dem Autorisierungsserver identifizieren.
  • Redirect URI: Ein URI, den der Autorisierungsserver dem Benutzer sendet, nachdem er den Zugriff auf die Client-Anwendung gewährt oder verweigert hat.
  • Autorisierungscodefluss: Eine sichere Methode, bei der die Client-Anwendung einen Autorisierungscode als Zwischenschritt erhält, bevor sie ihn gegen ein Zugriffstoken austauscht.

Implementierung von OAuth2 in C#;: Ein grundlegendes Beispiel

Lassen Sie uns eine einfache C#-Anwendung erstellen, die OAuth2 für die Benutzerauthentifizierung verwendet. Dieses Beispiel führt Sie durch das Einrichten eines OAuth2-Clients, das Abrufen eines Zugriffstokens und das Stellen einer Anfrage an eine geschützte Ressource.

Einrichten Ihres OAuth2-Clients

Zunächst müssen Sie Ihre C#-Anwendung bei dem OAuth2-Autorisierungsserver registrieren. Dieser Vorgang variiert je nach Server, aber in der Regel erhalten Sie eine Client-ID und ein Client-Geheimnis, die für den OAuth2-Ablauf entscheidend sind.

Schritt 1: Definieren Sie die Berechtigungsnachweise für Ihre Anwendung

Im ersten Schritt richten Sie Ihre Kundenanmeldedaten wie Kunden-ID und Kundengeheimnisse ein. Hier ist der Beispielcode:

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)
    {
        // OAuth2 implementation will go here
    }
}
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)
    {
        // OAuth2 implementation will go here
    }
}
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)
		' OAuth2 implementation will go here
	End Sub
End Class
VB   C#

Schritt 2: Beantragung der Benutzerautorisierung

Um den OAuth2-Fluss zu initiieren, leiten Sie den Benutzer an den Autorisierungsendpunkt des Autorisierungsservers um. So bauen Sie die URL für die Autorisierungsanfrage auf:

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}";
    // Redirect the user to 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}";
    // Redirect the user to 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}"
	' Redirect the user to authorizationUrl
End Sub
VB   C#

Schritt 3: Bearbeitung der Autorisierungsantwort

Nachdem der Benutzer die Erlaubnis erteilt oder verweigert hat, leitet der Autorisierungsserver den Benutzer mit einem Autorisierungscode oder einer Fehlermeldung zurück zu Ihrer Anwendung. Sie müssen diesen Code aus den Abfrageparametern des Redirect-URIs erfassen.

Schritt 4: Austauschen des Autorisierungscodes

Nun tauschen Sie den Autorisierungscode gegen ein Zugriffstoken aus. Dazu ist eine POST-Anfrage an den Token-Endpunkt des Autorisierungsservers erforderlich.

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();
    // Extract the access token from the response
    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();
    // Extract the access token from the response
    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()
	' Extract the access token from the response
	Dim token = ExtractAccessTokenFromResponse(responseString)
	Return token
End Function
VB   C#

Diese Funktion sendet eine POST-Anfrage an den Token-Endpunkt mit den erforderlichen Daten und gibt das aus der Antwort extrahierte Zugriffstoken zurück.

Schritt 5: Autorisierte Anträge stellen

Mit dem Zugriffstoken können Sie nun Anfragen an Ressourcen stellen, die eine Authentifizierung erfordern. Fügen Sie das Zugriffs-Token im Autorisierungs-Header als Bearer-Token an Ihre Anfragen an.

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#

Einführung in IronPDF

C# OAuth2 (Wie es für Entwickler funktioniert): Abbildung 2 - IronPDF-Webseite

IronPDF ist eine vielseitige Bibliothek für C#-Entwickler, die die Erzeugung, Bearbeitung und Darstellung von PDF-Dokumenten direkt in .NET-Anwendungen ermöglicht. Dieses leistungsstarke Werkzeug vereinfacht die Arbeit mit PDF-Dateien und macht die Erstellung komplexer Dokumente zum Kinderspiel, HTML in PDF konvertieren, Text aus PDFs extrahieren und vieles mehr. Die unkomplizierte API ermöglicht es Entwicklern, PDF-Funktionen schnell in ihre Anwendungen zu integrieren, ohne dass sie tiefgreifende Kenntnisse der PDF-Spezifikationen benötigen.

IronPDF zeichnet sich aus durch HTML zu PDF konvertierung, wobei Layouts und Stile erhalten bleiben. Diese Funktion ermöglicht die Erstellung von PDF-Dateien aus Webinhalten, was für Berichte, Rechnungen und Dokumentationen nützlich ist. Es unterstützt die Umwandlung von HTML-Dateien, URLs und HTML-Strings in PDF.

using IronPdf;

class Program
{
    static void Main(string[] args)
    {
        var renderer = new ChromePdfRenderer();

        // 1. Convert HTML String to PDF
        var htmlContent = "<h1>Hello, IronPDF!</h1><p>This is a PDF from an HTML string.</p>";
        var pdfFromHtmlString = renderer.RenderHtmlAsPdf(htmlContent);
        pdfFromHtmlString.SaveAs("HTMLStringToPDF.pdf");

        // 2. Convert HTML File to PDF
        var htmlFilePath = "path_to_your_html_file.html"; // Specify the path to your HTML file
        var pdfFromHtmlFile = renderer.RenderHtmlFileAsPdf(htmlFilePath);
        pdfFromHtmlFile.SaveAs("HTMLFileToPDF.pdf");

        // 3. Convert URL to PDF
        var url = "http://ironpdf.com"; // Specify the URL
        var pdfFromUrl = renderer.RenderUrlAsPdf(url);
        pdfFromUrl.SaveAs("URLToPDF.pdf");
    }
}
using IronPdf;

class Program
{
    static void Main(string[] args)
    {
        var renderer = new ChromePdfRenderer();

        // 1. Convert HTML String to PDF
        var htmlContent = "<h1>Hello, IronPDF!</h1><p>This is a PDF from an HTML string.</p>";
        var pdfFromHtmlString = renderer.RenderHtmlAsPdf(htmlContent);
        pdfFromHtmlString.SaveAs("HTMLStringToPDF.pdf");

        // 2. Convert HTML File to PDF
        var htmlFilePath = "path_to_your_html_file.html"; // Specify the path to your HTML file
        var pdfFromHtmlFile = renderer.RenderHtmlFileAsPdf(htmlFilePath);
        pdfFromHtmlFile.SaveAs("HTMLFileToPDF.pdf");

        // 3. Convert URL to PDF
        var url = "http://ironpdf.com"; // Specify the URL
        var pdfFromUrl = renderer.RenderUrlAsPdf(url);
        pdfFromUrl.SaveAs("URLToPDF.pdf");
    }
}
Imports IronPdf

Friend Class Program
	Shared Sub Main(ByVal args() As String)
		Dim renderer = New ChromePdfRenderer()

		' 1. Convert HTML String to PDF
		Dim htmlContent = "<h1>Hello, IronPDF!</h1><p>This is a PDF from an HTML string.</p>"
		Dim pdfFromHtmlString = renderer.RenderHtmlAsPdf(htmlContent)
		pdfFromHtmlString.SaveAs("HTMLStringToPDF.pdf")

		' 2. Convert HTML File to PDF
		Dim htmlFilePath = "path_to_your_html_file.html" ' Specify the path to your HTML file
		Dim pdfFromHtmlFile = renderer.RenderHtmlFileAsPdf(htmlFilePath)
		pdfFromHtmlFile.SaveAs("HTMLFileToPDF.pdf")

		' 3. Convert URL to PDF
		Dim url = "http://ironpdf.com" ' Specify the URL
		Dim pdfFromUrl = renderer.RenderUrlAsPdf(url)
		pdfFromUrl.SaveAs("URLToPDF.pdf")
	End Sub
End Class
VB   C#

Code-Beispiel: Erzeugen einer PDF-Datei aus geschütztem Inhalt

Stellen Sie sich vor, Sie haben einen Endpunkt, der HTML-Inhalte zurückgibt, die nur für authentifizierte Benutzer zugänglich sind. Sie könnten IronPDF verwenden, um diesen HTML-Inhalt in ein PDF-Dokument zu konvertieren und dabei das über OAuth2 erhaltene Zugriffstoken zu nutzen.

Definieren wir zunächst eine Methode zum Abrufen geschützter HTML-Inhalte unter Verwendung eines Zugriffstokens:

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#

Nun wollen wir IronPDF verwenden, um den abgerufenen HTML-Inhalt in ein PDF-Dokument zu konvertieren:

public static async Task ConvertHtmlToPdf(string accessToken, string apiUrl, string outputPdfPath)
{
    // Fetch protected content using the access token
    string htmlContent = await FetchProtectedContent(accessToken, apiUrl);
    // Use IronPDF to convert the HTML content to a PDF document
    var renderer = new IronPdf.HtmlToPdf();
    var pdf = renderer.RenderHtmlAsPdf(htmlContent);
    // Save the generated PDF to a file
    pdf.SaveAs(outputPdfPath);
}
public static async Task ConvertHtmlToPdf(string accessToken, string apiUrl, string outputPdfPath)
{
    // Fetch protected content using the access token
    string htmlContent = await FetchProtectedContent(accessToken, apiUrl);
    // Use IronPDF to convert the HTML content to a PDF document
    var renderer = new IronPdf.HtmlToPdf();
    var pdf = renderer.RenderHtmlAsPdf(htmlContent);
    // Save the generated PDF to a file
    pdf.SaveAs(outputPdfPath);
}
Public Shared Async Function ConvertHtmlToPdf(ByVal accessToken As String, ByVal apiUrl As String, ByVal outputPdfPath As String) As Task
	' Fetch protected content using the access token
	Dim htmlContent As String = Await FetchProtectedContent(accessToken, apiUrl)
	' Use IronPDF to convert the HTML content to a PDF document
	Dim renderer = New IronPdf.HtmlToPdf()
	Dim pdf = renderer.RenderHtmlAsPdf(htmlContent)
	' Save the generated PDF to a file
	pdf.SaveAs(outputPdfPath)
End Function
VB   C#

Im obigen Code ist FetchProtectedContent für den Abruf von HTML-Inhalten aus einer geschützten Ressource unter Verwendung eines OAuth2-Zugriffstokens zuständig. Sobald der HTML-Inhalt abgerufen wurde, wird er an den Renderer HtmlToPdf von IronPDF weitergeleitet, um ein PDF-Dokument zu erzeugen, das dann im angegebenen Pfad gespeichert wird.

Schlussfolgerung

C# OAuth2 (Wie es für Entwickler funktioniert): Abbildung 3 - IronPDF-Lizenzierungsseite

Dieser Leitfaden führt in die Grundlagen der Verwendung von OAuth2 in C#-Anwendungen ein und behandelt die wichtigsten Konzepte, die Terminologie und ein einfaches Implementierungsbeispiel. OAuth2 spielt eine wichtige Rolle bei der Sicherung von Webanwendungen, indem es die Benutzerauthentifizierung und -autorisierung effizient handhabt. Dieses Beispiel demonstriert den Autorisierungscodefluss, aber OAuth2 unterstützt auch andere Flüsse, die für verschiedene Arten von Anwendungen geeignet sind.

Durch die Integration von IronPDFkönnen C#-Entwickler die Funktionen ihrer Anwendungen um die Erstellung und Bearbeitung von PDF-Dateien erweitern und so die Funktionen für authentifizierte Benutzer verbessern. IronPDF's Benutzerfreundlichkeit und die umfassenden PDF-Bearbeitungsmöglichkeiten machen es zu einem hervorragenden Werkzeug für .NET-Entwickler, die in ihren Projekten mit PDF-Dateien arbeiten möchten. Sie bietet eine kostenlos testen um alle Funktionen zu testen. Und die Lizenz beginnt mit $749.

< PREVIOUS
C# WebRTC (Wie es für Entwickler funktioniert)
NÄCHSTES >
C# Operator (Wie es für Entwickler funktioniert)

Sind Sie bereit, loszulegen? Version: 2024.10 gerade veröffentlicht

Gratis NuGet-Download Downloads insgesamt: 11,308,499 Lizenzen anzeigen >