Aracılığıyla paylaş


Kimlik doğrulaması ve güvenlik

Azure DevOps Services | Azure DevOps Server 2022 - Azure DevOps Server 2019

Bu makale yalnızca web uzantılarıyla ilgili olup pipelines görev uzantıları veya hizmet uç noktası uzantılarıyla ilgili değildir. Bu görevler için Azure Service Bus'ta Yayımla Görevini kullanabilirsiniz.

İpucu

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

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

Çoğu uzantının geçerli kullanıcı adına Azure DevOps REST API'lerini çağırması gerekir.

  • Sağlanan JavaScript REST clientsöğesini 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 üst bilgisinde ayarlar.

  • Sağlanan istemcileri kullanmıyorsanız, içinden bir belirteç Core SDK istemeniz 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
            });
        });
    

Hizmetinizde isteklerin kimliğini doğrulama

Yaygın bir senaryo, bir uzantıdan arka uç hizmetine çağrı yapmaktır. Bu çağrıların Azure DevOps'ta çalışan 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 için özel bir belirteç türü sağlanır. Bu belirteç, aramayı kimin yaptığı hakkında bilgiler ve ayrıca isteğin uzantınızdan geldiğini bilmek için doğrulayabileceğiniz bir imza içerir.

Uzantınızın anahtarını alma

Uzantınızın benzersiz anahtarı (uzantı yayımlandığında oluşturulur) 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ı

Uzantıdaki kapsam değişiklikleri sertifikanın değişmesine neden olur. Kapsamda değişiklik yaparsanız yeni bir uzantı anahtarına ihtiyacınız vardır.

Hizmetinize sağlamak için belirteç oluşturma

  1. Çekirdek SDK getAppToken yöntemi, çözümlendiğinde uzantınızın sertifikasıyla imzalanan bir belirteç içerdiğine dair bir söz döndürür.

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

Belirteci ayrıştırma ve doğrulama

Burada belirteci ayrıştırma örneği verilmiştir. İlk olarak uzantınızın gizli dizisini indirin ve depolayın. Bunu yayımcı sayfanızdan alabilirsiniz. Bu gizli dizinin uygulamanız tarafından kullanılabilir olması gerekir.

.NET Framework

Bu örneği derlemek için 1 başvuru eklemeniz gerekir.

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

Bu örneği derlemek için 1 başvuru eklemeniz gerekir.

  1. NuGet Paket Yöneticisi açın ve System.IdentityModel.Tokens.Jwt dosyasına bir başvuru ekleyin. Bu örnek, bu paketin 5.1.4 sürümüyle oluşturulmuştu.

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
{
   // ...
}