Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Azure DevOps Services | Azure DevOps Server | Azure DevOps Server 2022
Tento článek se týká pouze ověřování a zabezpečení webových rozšíření, nikoli rozšíření úloh Pipelines nebo rozšíření koncových bodů služby. U těchto úloh můžete použít úlohu Publikovat do služby Azure Service Bus.
Volání rozhraní REST API z rozšíření
Většina rozšíření musí vyvolávat rozhraní REST API Azure DevOps jménem aktuálního uživatele.
Pokud používáte zadanou službu
JavaScript REST clients, ověřování se automaticky zpracuje za vás. Tito klienti požadují přístupový token ze základní sady SDK a nastavili ho v hlavičce Autorizace požadavku.Pokud nepoužíváte poskytnuté klienty, musíte si vyžádat token od
Core SDKa nastavit ho v autorizační hlavičce svého požadavku: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); });
Návod
Projděte si naši nejnovější dokumentaci k vývoji rozšíření pomocí Azure DevOps Extension SDK.
Ověřování požadavků na vaši službu
Běžným scénářem je volání back-endové služby z rozšíření. Pokud chcete ověřit, že tato volání pocházejí z vašeho rozšíření spuštěného v Azure DevOps a k ověření aktuálního uživatele a dalších kontextových informací, poskytne se vašemu rozšíření speciální typ tokenu. Tento token obsahuje informace o volajícím a podpis, který lze ověřit, abyste zajistili, že požadavek pochází z vašeho rozšíření.
Získání klíče rozšíření
Jedinečný klíč vašeho rozšíření vygenerovaný při publikování rozšíření můžete použít k ověření pravosti požadavků provedených z vašeho rozšíření.
Tento klíč získáte tak, že přejdete na portál pro správu rozšíření, kliknete pravým tlačítkem na publikované rozšíření a vyberete Certifikát.
Výstraha
Změny rozsahu v rozšíření způsobí, že se certifikát změní. Pokud provedete změny v rozsahu, potřebujete nový klíč rozšíření.
Vygenerujte token k poskytnutí vaší službě
Metoda Core SDK
getAppTokenvrátí příslib, že při vyřešení obsahuje token podepsaný certifikátem vašeho rozšíření.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); });Tento token předejte službě jako parametr dotazu nebo hlavičku požadavku.
Parsování a ověření tokenu
Tady je ukázka analýzy tokenu. Nejdřív si stáhněte a uložte tajný kód rozšíření ze stránky vydavatele. Tento tajný klíč musí být dostupný pro vaši aplikaci.
.NET Framework
Proveďte následující úlohu a přidejte jeden odkaz pro získání ukázky ke kompilaci.
Otevřete Správce balíčků NuGet a přidejte odkaz na System.IdentityModel.Tokens.Jwt. Tato ukázka byla vytvořena s verzí 6.8.0 tohoto balíčku.
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
Proveďte následující úlohu a přidejte jeden odkaz pro získání této ukázky ke kompilaci.
Otevřete Správce balíčků NuGet a přidejte odkaz na System.IdentityModel.Tokens.Jwt. Tato ukázka byla vytvořena s verzí 5.1.4 tohoto balíčku.
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();
});
}
}
}
Kontrolery rozhraní API:
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
[Route("api/[controller]")]
[Authorize]
public class SampleLogicController : ControllerBase
{
// ...
}