Bagikan melalui


Autentikasi dan keamanan

Layanan Azure DevOps | Azure DevOps Server 2022 - Azure DevOps Server 2019

Artikel ini hanya berkaitan dengan ekstensi web, dan bukan ekstensi tugas Alur atau ekstensi titik akhir layanan. Untuk tugas tersebut, Anda bisa menggunakan Tugas Terbitkan ke Azure Bus Layanan.

Tip

Lihat dokumentasi terbaru kami tentang pengembangan ekstensi menggunakan Azure DevOps Extension SDK.

Memanggil REST API dari ekstensi Anda

Sebagian besar ekstensi memiliki kebutuhan untuk memanggil REST API Azure DevOps atas nama pengguna saat ini.

  • Jika Anda menggunakan yang disediakan JavaScript REST clients, autentikasi secara otomatis ditangani untuk Anda. Klien ini secara otomatis 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 SDK dan mengaturnya di header Otorisasi permintaan Anda:

    VSS.require(["VSS/Authentication/Services"],
        function (VSS_Auth_Service) {
            VSS.getAccessToken().then(function(token){
                // Format the auth header
                var authHeader = VSS_Auth_Service.authTokenManager.getAuthorizationHeader(token);
    
                // Add token as an Authorization header to your request
            });
        });
    

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 memverifikasi keaslian pengguna saat ini (dan informasi konteks lainnya), jenis token khusus tersedia untuk ekstensi Anda. Token ini berisi informasi tentang siapa yang melakukan panggilan dan juga tanda tangan yang dapat Anda validasi untuk mengetahui bahwa 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, klik kanan ekstensi yang diterbitkan dan pilih Sertifikat.

kunci

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

  1. Metode Core SDK getAppToken mengembalikan janji yang, ketika diselesaikan, berisi token yang ditandatangani dengan sertifikat ekstensi Anda.

    VSS.getAppToken().then(function(token){
        // Add token to your request
    });
    
  2. Teruskan token ini ke layanan Anda sebagai parameter kueri atau header permintaan.

Mengurai dan memvalidasi token

Berikut adalah sampel penguraian token. Pertama unduh dan simpan rahasia untuk ekstensi Anda. Anda bisa mendapatkan ini dari halaman penerbit Anda. Rahasia ini harus tersedia untuk aplikasi Anda.

.NET Framework

Anda harus menambahkan 1 referensi untuk mendapatkan sampel ini untuk dikompilasi.

  1. Buka Manajer Paket NuGet dan tambahkan referensi ke System.IdentityModel.Tokens.Jwt. Sampel ini dibuat dengan versi 5.2.2 dari paket ini.
using System.Collections.Generic;
using System.ServiceModel.Security.Tokens;
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.UTF8Encoding.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);
		}
	}
}

.NET Core - WebAPI

Anda harus menambahkan 1 referensi untuk mendapatkan sampel ini untuk dikompilasi.

  1. 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.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.AddMvc();

            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, IHostingEnvironment env)
        {
            app.UseAuthentication();
            app.UseAuthorization();
            app.UseMvc();
            app.UseStaticFiles();
        }
    }
}

Pengontrol API Anda:

[Route("api/[controller]"), 
 Authorize()]
public class SampleLogicController : Controller
{
   // ...
}