Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Azure DevOps Services | Azure DevOps Server | Azure DevOps Server 2022
Ez a cikk csak webes bővítmények hitelesítését ismerteti. Ez nem vonatkozik a folyamatfeladat-bővítményekre vagy a szolgáltatásvégpont-bővítményekre.
Jótanács
A legújabb bővítményfejlesztési útmutatást, beleértve a témázást és a VSS.SDK-ból való migrálást, lásd az Azure DevOps Extension SDK fejlesztői portálját.
REST API-k meghívása a bővítményből
A legtöbb bővítmény meghívja az Azure DevOps REST API-kat az aktuális felhasználó nevében.
Az SDK REST-ügyfelek használata: A hitelesítés automatikusan történik. Az ügyfelek hozzáférési jogkivonatot kérnek az SDK-tól, és beállítják a fejlécet
Authorization.Egyéni HTTP-kérések használata: Kérjen egy tokent az SDK-tól, és állítsa be önmaga a fejlécet:
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 });
A szolgáltatáshoz érkező kérések hitelesítése
Amikor a bővítmény egy ön által felügyelt háttérszolgáltatást hív meg, ellenőriznie kell, hogy a kérés az Azure DevOpsban futó bővítményből származik-e. Az SDK getAppToken() használ, amely a bővítmény tanúsítványával aláírt JWT-t ad vissza. A szolgáltatás érvényesíti ezt a tokent a kérés hitelesítéséhez.
A bővítmény kulcsának lekérése
A bővítmény egyedi kulcsa a közzétételkor jön létre. Ezzel ellenőrizheti a bővítmény jogkivonatainak hitelességét.
- Nyissa meg a bővítménykezelési portált.
- Kattintson a jobb gombbal a közzétett bővítményre , és válassza a Tanúsítvány lehetőséget.
Figyelmeztetés
A hatókör módosítása miatt a tanúsítvány megváltozik. Új kulcs lekérése a hatókörök módosítása után.
Token generálása a szolgáltatásodhoz
A getAppToken() használatával szerezze be a saját bővítményének tanúsítványával aláírt JWT-t, majd adja át azt a szolgáltatásnak.
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}`
}
});
});
A token érvényesítése
A háttérszolgáltatás a bővítmény titkos kulcsával ellenőrzi a JWT-t. Az alábbi példák az ellenőrzés implementálását mutatják be.
Fontos
Soha ne kódolja a bővítmény titkos kódját a forráskódban. Töltse be a környezeti változókból, az Azure Key Vaultból vagy egy másik biztonságos konfigurációs tárból.
.NET (konzolalkalmazás)
Telepítse a NuGet-csomagot:
dotnet add package System.IdentityModel.Tokens.Jwt
Megjegyzés:
Használja a 7.x vagy újabb verziót. A 6.x és korábbi verzió elavult. A részletekért lásd : IdentityModel-verzió életciklusa .
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
Telepítse a NuGet-csomagot:
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-vezérlő:
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
[Route("api/[controller]")]
[Authorize]
public class SampleLogicController : ControllerBase
{
// Requests without a valid token return 401 Unauthorized
}