Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Azure DevOps Services | Azure DevOps Server 2022 – Azure DevOps Server 2019
Den här artikeln gäller endast autentisering och säkerhet för webbtilläggoch inte Pipelines-aktivitetstillägg eller tjänstslutpunktstillägg. För dessa uppgifter kan du använda Publicera till Azure Service Bus-uppgift.
Anropa REST-API:er från ditt tillägg
De flesta tillägg måste anropa Azure DevOps REST API:er för den aktuella användarens räkning.
Om du använder den angivna
JavaScript REST clients
hanteras autentiseringen automatiskt åt dig. Dessa klienter begär en åtkomsttoken från kärn-SDK:et och anger den i auktoriseringshuvudet för begäran.Om du inte använder de angivna klienterna måste du begära en token från
Core SDK
och ange den i auktoriseringshuvudet för din begäran:import * as SDK from "azure-devops-extension-sdk"; import { getAccessToken } from "azure-devops-extension-sdk"; SDK.init(); getAccessToken().then((token) => { // Format the auth header const authHeader = `Bearer ${token}`; // Add token as an Authorization header to your request console.log(authHeader); });
Tips
Läs vår senaste dokumentation om tilläggsutveckling med hjälp av Azure DevOps Extension SDK.
Autentisera begäranden till din tjänst
Ett vanligt scenario är att göra anrop till en backend-tjänst från ett tillägg. För att verifiera att dessa anrop kommer från ditt tillägg som körs i Azure DevOps och för att autentisera den aktuella användaren och annan kontextinformation, tillhandahålls en särskild typ av token till ditt tillägg. Den här token innehåller information om anroparen och en signatur som du kan verifiera för att säkerställa att begäran kommer från ditt tillägg.
Hämta tilläggets nyckel
Tilläggets unika nyckel, som genereras när tillägget publiceras, kan användas för att verifiera äktheten hos begäranden som görs från tillägget.
Om du vill hämta den här nyckeln går du till -tilläggshanteringsportalen, högerklickar på ett publicerat tilläggoch väljer sedan Certificate.
Varning
Omfångsändringar i ett tillägg gör att certifikatet ändras. Om du gör ändringar i omfånget behöver du en ny tilläggsnyckel.
Generera en token som ska tillhandahållas till din tjänst
Metoden Core SDK
getAppToken
returnerar ett löfte som, när det löses, innehåller en token signerad med ditt tilläggs certifikat.import * as SDK from "azure-devops-extension-sdk"; import { getAppToken } from "azure-devops-extension-sdk"; SDK.init(); getAppToken().then((token) => { // Add token to your request console.log(token); });
Skicka den här token till din tjänst som en frågeparameter eller begärandehuvud.
Parsa och verifiera token
Här är ett exempel på hur du parsar token. Ladda först ned och lagra hemligheten för tillägget från utgivarens sida. Den här hemligheten måste vara tillgänglig för din applikation.
.NET Framework
Gör följande uppgift för att lägga till en referens för att hämta exemplet för kompilering.
Öppna NuGet Package Manager och lägg till en referens till System.IdentityModel.Tokens.Jwt
. Det här exemplet skapades med version 6.8.0 av det här paketet.
using System;
using System.IdentityModel.Tokens.Jwt;
using Microsoft.IdentityModel.Tokens;
namespace TokenSample
{
class Program
{
static void Main(string[] args)
{
string secret = ""; // Load your extension's secret
string issuedToken = ""; // Token you are validating
var validationParameters = new TokenValidationParameters()
{
IssuerSigningKey = new SymmetricSecurityKey(System.Text.Encoding.UTF8.GetBytes(secret)),
ValidateIssuer = false,
RequireSignedTokens = true,
RequireExpirationTime = true,
ValidateLifetime = true,
ValidateAudience = false,
ValidateActor = false
};
SecurityToken token = null;
var tokenHandler = new JwtSecurityTokenHandler();
var principal = tokenHandler.ValidateToken(issuedToken, validationParameters, out token);
// Use the principal object as needed
Console.WriteLine(principal.Identity.Name);
}
}
}
.NET Core – WebAPI
Gör följande uppgift för att lägga till en referens för att hämta det här exemplet för kompilering.
Öppna NuGet Package Manager och lägg till en referens till System.IdentityModel.Tokens.Jwt
. Det här exemplet skapades med version 5.1.4 av det här paketet.
Startup.cs
using System.Text;
using Microsoft.AspNetCore.Authentication.JwtBearer;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.IdentityModel.Tokens;
namespace TokenSample.Core.API
{
public class Startup
{
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
public IConfiguration Configuration { get; }
public void ConfigureServices(IServiceCollection services)
{
services.AddControllers();
string _secret = "ey9asfasdmax..<the secret key downloaded from the Azure DevOps Services publisher page>.9faf7eh";
services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddJwtBearer((o) =>
{
o.TokenValidationParameters = new TokenValidationParameters()
{
IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_secret)),
ValidateIssuer = false,
ValidateAudience = false,
ValidateActor = false,
RequireSignedTokens = true,
RequireExpirationTime = true,
ValidateLifetime = true
};
});
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseAuthentication();
app.UseAuthorization();
app.UseRouting();
app.UseStaticFiles();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});
}
}
}
DINA API-kontrollanter:
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
[Route("api/[controller]")]
[Authorize]
public class SampleLogicController : ControllerBase
{
// ...
}