Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Azure DevOps Services | Azure DevOps Server | Azure DevOps Server 2022
In diesem Artikel wird nur die Authentifizierung für Weberweiterungen behandelt. Sie gilt nicht für Pipelineaufgabenerweiterungen oder Dienstendpunkterweiterungen.
Tipp
Für die neuesten Anleitungen zur Erweiterungsentwicklung, einschließlich Themengestaltung und Migration von VSS.SDK, besuchen Sie das Entwicklerportal des Azure DevOps Extension SDK.
Aufrufen von REST-APIs aus Ihrer Erweiterung
Die meisten Erweiterungen rufen Azure DevOps-REST-APIs im Namen des aktuellen Benutzers auf.
Verwenden der SDK-REST-Clients: Die Authentifizierung wird automatisch behandelt. Die Clients fordern ein Zugriffstoken aus dem SDK an und legen den
AuthorizationHeader fest.Verwenden von benutzerdefinierten HTTP-Anforderungen: Anfordern eines Tokens aus dem SDK und Festlegen des Headers selbst:
import * as SDK from "azure-devops-extension-sdk"; SDK.init(); SDK.ready().then(async () => { const token = await SDK.getAccessToken(); const authHeader = `Bearer ${token}`; // Use authHeader in your fetch/XMLHttpRequest calls });
Authentifizieren von Anforderungen an Ihren Dienst
Wenn Ihre Erweiterung einen von Ihnen gesteuerten Back-End-Dienst aufruft, müssen Sie überprüfen, ob die Anforderung von Ihrer Erweiterung stammt, die in Azure DevOps ausgeführt wird. Das SDK stellt ein getAppToken()JWT bereit, das mit dem Zertifikat Ihrer Erweiterung signiert ist. Ihr Dienst überprüft dieses Token, um die Anforderung zu authentifizieren.
Holen Sie sich den Schlüssel Ihrer Erweiterung
Der eindeutige Schlüssel Ihrer Erweiterung wird generiert, wenn Sie sie veröffentlichen. Verwenden Sie sie, um die Echtheit von Token aus Ihrer Erweiterung zu überprüfen.
- Wechseln Sie zum Erweiterungsverwaltungsportal.
- Klicken Sie mit der rechten Maustaste auf Ihre veröffentlichte Erweiterung , und wählen Sie "Zertifikat" aus.
Warnung
Bereichsänderungen bewirken, dass sich das Zertifikat ändert. Rufen Sie nach dem Ändern von Bereichen einen neuen Schlüssel ab.
Generieren eines Tokens für Ihren Dienst
Verwenden Sie getAppToken(), um ein JWT zu erhalten, das mit dem Zertifikat Ihrer Erweiterung signiert ist, und übergeben Sie es an Ihren Dienst.
import * as SDK from "azure-devops-extension-sdk";
SDK.init();
SDK.ready().then(async () => {
const token = await SDK.getAppToken();
// Pass this token to your backend as a header or query parameter
const response = await fetch("https://your-service.example.com/api/data", {
headers: {
"Authorization": `Bearer ${token}`
}
});
});
Überprüfen des Tokens
Ihr Back-End-Dienst überprüft das JWT mithilfe des geheimen Schlüssels Ihrer Erweiterung. Die folgenden Beispiele zeigen, wie Die Validierung implementiert wird.
Von Bedeutung
Codieren Sie niemals Ihren Erweiterungsschlüssel im Quellcode. Laden Sie es aus Umgebungsvariablen, Azure Key Vault oder einem anderen sicheren Konfigurationsspeicher.
.NET (Konsolenanwendung)
Installieren Sie das NuGet-Paket:
dotnet add package System.IdentityModel.Tokens.Jwt
Hinweis
Verwenden Sie Version 7.x oder höher. Version 6.x und frühere Versionen sind veraltet. Details finden Sie unter IdentityModel-Versionslebenszyklus .
using System.IdentityModel.Tokens.Jwt;
using Microsoft.IdentityModel.Tokens;
string secret = Environment.GetEnvironmentVariable("EXTENSION_SECRET")
?? throw new InvalidOperationException("EXTENSION_SECRET not configured");
string issuedToken = ""; // Token from the extension request
var validationParameters = new TokenValidationParameters()
{
IssuerSigningKey = new SymmetricSecurityKey(System.Text.Encoding.UTF8.GetBytes(secret)),
ValidateIssuer = false,
ValidateAudience = false,
ValidateActor = false,
RequireSignedTokens = true,
RequireExpirationTime = true,
ValidateLifetime = true
};
var tokenHandler = new JwtSecurityTokenHandler();
var principal = tokenHandler.ValidateToken(issuedToken, validationParameters, out SecurityToken token);
ASP.NET Core-Web-API
Installieren Sie das NuGet-Paket:
dotnet add package Microsoft.AspNetCore.Authentication.JwtBearer
Program.cs
using System.Text;
using Microsoft.AspNetCore.Authentication.JwtBearer;
using Microsoft.IdentityModel.Tokens;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddControllers();
string secret = builder.Configuration["ExtensionSecret"]
?? throw new InvalidOperationException("ExtensionSecret not configured");
builder.Services
.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddJwtBearer(options =>
{
options.TokenValidationParameters = new TokenValidationParameters()
{
IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(secret)),
ValidateIssuer = false,
ValidateAudience = false,
ValidateActor = false,
RequireSignedTokens = true,
RequireExpirationTime = true,
ValidateLifetime = true
};
});
var app = builder.Build();
app.UseAuthentication();
app.UseRouting();
app.UseAuthorization();
app.MapControllers();
app.Run();
API-Controller:
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
[Route("api/[controller]")]
[Authorize]
public class SampleLogicController : ControllerBase
{
// Requests without a valid token return 401 Unauthorized
}