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