Kimlik doğrulama ve güvenlik

Azure DevOps Services | Azure DevOps Server 2020 | Azure DevOps Server 2019 | TFS 2018-TFS 2017

Not

bu sayfa yalnızca web uzantılarınayönelik Pipelines görev uzantıları veya hizmet uç noktası uzantıları için geçerlidir. bu görevler için Azure 'da yayımla Service Bus görevikullanabilirsiniz.

İpucu

Azure DevOps uzantısı SDK 'sınıkullanarak uzantı geliştirmede en yeni belgelerimize göz atın.

Uzantınızdan REST API 'Leri çağırma

çoğu uzantının, geçerli kullanıcı adına Azure DevOps REST apı 'leri çağırması gerekir.

  • Belirtilen JavaScript REST clients ' i kullanıyorsanız, kimlik doğrulaması sizin için otomatik olarak işlenir. Bu istemciler, çekirdek SDK 'dan otomatik olarak bir erişim belirteci ister ve isteğin yetkilendirme üstbilgisinde ayarlanır.

  • Belirtilen istemcileri kullanmıyorsanız, ' dan bir belirteç istemeniz Core SDK ve Isteğinizin yetkilendirme üst bilgisinde ayarlamanız gerekir:

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

Hizmetinizdeki isteklerin kimliğini doğrulama

Yaygın bir senaryo, bir uzantıdan arka uç hizmetine çağrı yapmak için kullanılır. bu çağrıların Azure DevOps çalıştıran uzantınızdan geldiğini doğrulamak ve geçerli kullanıcının (ve diğer bağlam bilgilerinin) orijinalliğini doğrulamak için, uzantınızın özel bir belirteç türü kullanıma sunulmuştur. Bu belirteç, çağrıyı yapan kim ve ayrıca isteğin uzantınızdan geldiğini öğrenmek için doğrulayabileceğiniz bir imza hakkında bilgiler içerir.

Uzantınızın anahtarını alın

Uzantınızın benzersiz anahtarı (uzantı yayımlandığında üretilir), uzantınızdan yapılan isteklerin orijinalliğini doğrulamak için kullanılabilir.

Bu anahtarı almak için, yayımlanmış bir uzantıya sağ tıklayın ve sertifika' yı seçin.

anahtar

Uyarı

Bir uzantıdaki kapsam değişiklikleri sertifikanın değişmesine neden olur. Kapsamda değişiklik yaparsanız, yeni bir uzantı anahtarı gerekir.

Hizmetinize sağlamak için bir belirteç oluşturun

  1. Çekirdek SDK getAppToken yöntemi, çözümlendiğinde uzantınızın sertifikasıyla imzalanmış bir belirteç içeren bir Promise döndürür.

    VSS.getAppToken().then(function(token){
        // Add token to your request
    });
    
  2. Bu belirteci hizmetinize bir sorgu parametresi veya istek üst bilgisi olarak iletin.

Belirteci ayrıştırma ve doğrulama

Belirteç ayrıştırma örneği aşağıda verilmiştir. İlk olarak uzantınızın gizliliğini indirin ve saklayın. Bunu, yayımcı sayfasından edinebilirsiniz. Bu parolanın uygulamanız için kullanılabilir olması gerekir.

.NET Framework

Derlemek için bu örneği almak üzere 1 başvuru eklemeniz gerekir.

  1. NuGet Paket Yöneticisi açın ve System. ıdentitymodel. Tokens. Jwtöğesine bir başvuru ekleyin. Bu örnek, bu paketin 5.2.2 sürümü ile oluşturulmuştur.
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

Derlemek için bu örneği almak üzere 1 başvuru eklemeniz gerekir.

  1. NuGet Paket Yöneticisi açın ve System. ıdentitymodel. Tokens. Jwtöğesine bir başvuru ekleyin. Bu örnek, bu paketin 5.1.4 sürümü ile oluşturulmuştur.

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

API denetleyicileriniz:

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