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 SDKve 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.

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
Çekirdek SDK
getAppTokenyö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 });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.
- 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.
- 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
{
// ...
}