Udostępnij za pośrednictwem


Uwierzytelnianie i zabezpieczenia

Azure DevOps Services | Azure DevOps Server 2022 — Azure DevOps Server 2019

Ten artykuł dotyczy tylko rozszerzeń sieci Web, a nie rozszerzeń zadań potoków lub rozszerzeń punktu końcowego usługi. W przypadku tych zadań można użyć zadania Publikuj w usłudze Azure Service Bus.

Napiwek

Zapoznaj się z naszą najnowszą dokumentacją dotyczącą programowania rozszerzeń przy użyciu zestawu SDK rozszerzenia usługi Azure DevOps.

Wywoływanie interfejsów API REST z rozszerzenia

Większość rozszerzeń wymaga wywołania interfejsów API REST usługi Azure DevOps w imieniu bieżącego użytkownika.

  • Jeśli używasz podanego JavaScript REST clientselementu , uwierzytelnianie jest automatycznie obsługiwane. Ci klienci automatycznie żądają tokenu dostępu z podstawowego zestawu SDK i ustawiają go w nagłówku Autoryzacja żądania.

  • Jeśli nie używasz podanych klientów, musisz zażądać tokenu Core SDK z obiektu i ustawić go w nagłówku Autoryzacja żądania:

    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
            });
        });
    

Uwierzytelnianie żądań do usługi

Typowym scenariuszem jest wykonywanie wywołań do usługi zaplecza z rozszerzenia. Aby sprawdzić, czy te wywołania pochodzą z rozszerzenia uruchomionego w usłudze Azure DevOps i zweryfikowania autentyczności bieżącego użytkownika (i innych informacji kontekstowych), dla rozszerzenia zostanie udostępniony specjalny typ tokenu. Ten token zawiera informacje o tym, kto wykonuje wywołanie, a także podpis, który można zweryfikować, aby wiedzieć, że żądanie pochodzi z rozszerzenia.

Uzyskiwanie klucza rozszerzenia

Unikatowy klucz rozszerzenia (generowany podczas publikowania rozszerzenia) może służyć do weryfikowania autentyczności żądań wysyłanych z rozszerzenia.

Aby uzyskać ten klucz, kliknij prawym przyciskiem myszy opublikowane rozszerzenie i wybierz pozycję Certyfikat.

key

Ostrzeżenie

Zmiany zakresu w rozszerzeniu powodują zmianę certyfikatu. Jeśli wprowadzisz zmiany w zakresie, potrzebujesz nowego klucza rozszerzenia.

Generowanie tokenu w celu udostępnienia usługi

  1. Metoda podstawowego zestawu SDK getAppToken zwraca obietnicę, która po rozpoznaniu zawiera token podpisany przy użyciu certyfikatu rozszerzenia.

    VSS.getAppToken().then(function(token){
        // Add token to your request
    });
    
  2. Przekaż ten token do usługi jako parametr zapytania lub nagłówek żądania.

Analizowanie i weryfikowanie tokenu

Oto przykład analizowania tokenu. Najpierw pobierz i zapisz wpis tajny dla rozszerzenia. Możesz to uzyskać ze strony wydawcy. Ten wpis tajny musi być dostępny dla aplikacji.

.NET Framework

Aby skompilować ten przykład, musisz dodać 1 odwołanie.

  1. Otwórz Menedżer pakietów NuGet i dodaj odwołanie do elementu System.IdentityModel.Tokens.Jwt. Ten przykład został skompilowany przy użyciu wersji 5.2.2 tego pakietu.
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

Aby skompilować ten przykład, musisz dodać 1 odwołanie.

  1. Otwórz Menedżer pakietów NuGet i dodaj odwołanie do elementu System.IdentityModel.Tokens.Jwt. Ten przykład został skompilowany przy użyciu wersji 5.1.4 tego pakietu.

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();
        }
    }
}

Kontrolery interfejsu API:

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