Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Layanan Azure DevOps | Azure DevOps Server | Azure DevOps Server 2022
Artikel ini hanya berkaitan dengan autentikasi dan keamanan untuk ekstensi web, dan bukan ekstensi tugas Pipelines atau ekstensi titik akhir layanan. Untuk tugas tersebut, Anda bisa menggunakan Tugas Terbitkan ke Azure Service Bus.
Memanggil REST API dari ekstensi Anda
Sebagian besar ekstensi perlu memanggil REST API Azure DevOps atas nama pengguna saat ini.
Jika Anda menggunakan
JavaScript REST clientsyang telah disediakan, autentikasi diurus otomatis untuk Anda. Klien ini meminta token akses dari SDK inti dan mengaturnya di header Otorisasi permintaan.Jika Anda tidak menggunakan klien yang disediakan, Anda perlu meminta token dari
Core SDKdan mengaturnya di header Otorisasi permintaan Anda: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); });
Petunjuk / Saran
Lihat dokumentasi terbaru kami tentang pengembangan ekstensi menggunakan Azure DevOps Extension SDK.
Mengautentikasi permintaan ke layanan Anda
Skenario umum adalah melakukan panggilan ke layanan back-end dari ekstensi. Untuk memverifikasi bahwa panggilan ini berasal dari ekstensi Anda yang berjalan di Azure DevOps dan untuk mengautentikasi pengguna saat ini, dan informasi konteks lainnya, jenis token khusus disediakan untuk ekstensi Anda. Token ini berisi informasi tentang pemanggil dan tanda tangan yang dapat Anda validasi untuk memastikan permintaan berasal dari ekstensi Anda.
Dapatkan kunci ekstensi Anda
Kunci unik ekstensi Anda, yang dihasilkan saat ekstensi diterbitkan, dapat digunakan untuk memverifikasi keaslian permintaan yang dibuat dari ekstensi Anda.
Untuk mendapatkan kunci ini, buka portal manajemen ekstensi, klik kanan pada ekstensi yang diterbitkan, lalu pilih Sertifikat.
Peringatan
Perubahan cakupan dalam ekstensi menyebabkan sertifikat berubah. Jika Anda membuat perubahan pada cakupan, Anda memerlukan kunci ekstensi baru.
Membuat token untuk diberikan ke layanan Anda
Metode Core SDK
getAppTokenmengembalikan janji bahwa, ketika diselesaikan, berisi token yang ditandatangani dengan sertifikat ekstensi Anda.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); });Teruskan token ini ke layanan Anda sebagai parameter kueri atau header permintaan.
Mengurai dan memvalidasi token
Berikut ini adalah contoh penguraian token. Pertama, unduh dan simpan rahasia untuk ekstensi Anda dari halaman penerbit Anda. Rahasia ini harus tersedia untuk aplikasi Anda.
.NET Framework
Lakukan tugas berikut untuk menambahkan satu referensi untuk mendapatkan sampel untuk dikompilasi.
Buka Manajer Paket NuGet dan tambahkan referensi ke System.IdentityModel.Tokens.Jwt. Sampel ini dibuat dengan versi 6.8.0 dari paket ini.
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
Lakukan tugas berikut untuk menambahkan satu referensi untuk mendapatkan sampel ini untuk dikompilasi.
Buka Manajer Paket NuGet dan tambahkan referensi ke System.IdentityModel.Tokens.Jwt. Sampel ini dibuat dengan versi 5.1.4 dari paket ini.
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();
});
}
}
}
Pengontrol API Anda:
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
[Route("api/[controller]")]
[Authorize]
public class SampleLogicController : ControllerBase
{
// ...
}