Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Azure DevOps Services | Azure DevOps Server | Azure DevOps Server 2022
Bu makale yalnızca web uzantıları için kimlik doğrulamasını kapsar. İşlem hattı görev uzantıları veya hizmet uç noktası uzantıları için geçerli değildir.
Tavsiye
En son uzantı geliştirme kılavuzu için, temalandırma ve VSS.SDK'dan geçiş dahil, Azure DevOps Uzantısı SDK geliştirici portalına bakın.
Uzantınızdan REST API'lerini çağırma
Çoğu uzantı, geçerli kullanıcı adına Azure DevOps REST API'lerini çağırır.
SDK REST istemcilerini kullanma: Kimlik doğrulaması otomatik olarak işlenir. İstemciler SDK'dan erişim belirteci ister ve
Authorizationbaşlığını ayarlar.Özel HTTP isteklerini kullanma: SDK'dan belirteç isteyin ve üst bilgiyi kendiniz ayarlayın:
import * as SDK from "azure-devops-extension-sdk"; SDK.init(); SDK.ready().then(async () => { const token = await SDK.getAccessToken(); const authHeader = `Bearer ${token}`; // Use authHeader in your fetch/XMLHttpRequest calls });
Hizmetinize gelen istekleri kimlik doğrulamasından geçirin.
Uzantınız denetlediğiniz bir arka uç hizmetini çağırdığında, isteğin Azure DevOps'ta çalışan uzantınızdan geldiğini doğrulamanız gerekir. SDK, getAppToken()uzantınızın sertifikasıyla imzalanan bir JWT döndüren sağlar. Hizmetiniz isteğin kimliğini doğrulamak için bu belirteci doğrular.
Uzantınızın anahtarını alma
Uzantınızın benzersiz anahtarı yayımladığınızda oluşturulur. Uzantınızdaki belirteçlerin orijinalliğini doğrulamak için bunu kullanın.
- Uzantı yönetimi portalına gidin.
- Yayımlanan uzantınıza sağ tıklayın ve Sertifika'ya tıklayın.
Uyarı
Kapsam değişiklikleri sertifikanın değişmesine neden olur. Kapsamları değiştirdikten sonra yeni bir anahtar alın.
Hizmetiniz için belirteç oluşturma
Uzantınızın sertifikasıyla imzalanan bir JWT almak ve bunu hizmetinize geçirmek için kullanın getAppToken() :
import * as SDK from "azure-devops-extension-sdk";
SDK.init();
SDK.ready().then(async () => {
const token = await SDK.getAppToken();
// Pass this token to your backend as a header or query parameter
const response = await fetch("https://your-service.example.com/api/data", {
headers: {
"Authorization": `Bearer ${token}`
}
});
});
Belirteci doğrula
Arka uç hizmetiniz, uzantınızın gizli dizi anahtarını kullanarak JWT'yi doğrular. Aşağıdaki örneklerde doğrulamanın nasıl uygulanacakları gösterilmektedir.
Önemli
Uzantı gizli dizinizi asla kaynak kodunda sabit kodlamayın. Ortam değişkenlerinden, Azure Key Vault'tan veya başka bir güvenli yapılandırma deposundan yükleyin.
.NET (konsol uygulaması)
NuGet paketini yükleyin:
dotnet add package System.IdentityModel.Tokens.Jwt
Uyarı
7.x veya sonraki bir sürümü kullanın. Sürüm 6.x ve önceki sürümler kullanım dışıdır. Ayrıntılar için bkz. IdentityModel sürüm yaşam döngüsü .
using System.IdentityModel.Tokens.Jwt;
using Microsoft.IdentityModel.Tokens;
string secret = Environment.GetEnvironmentVariable("EXTENSION_SECRET")
?? throw new InvalidOperationException("EXTENSION_SECRET not configured");
string issuedToken = ""; // Token from the extension request
var validationParameters = new TokenValidationParameters()
{
IssuerSigningKey = new SymmetricSecurityKey(System.Text.Encoding.UTF8.GetBytes(secret)),
ValidateIssuer = false,
ValidateAudience = false,
ValidateActor = false,
RequireSignedTokens = true,
RequireExpirationTime = true,
ValidateLifetime = true
};
var tokenHandler = new JwtSecurityTokenHandler();
var principal = tokenHandler.ValidateToken(issuedToken, validationParameters, out SecurityToken token);
ASP.NET Core Web API'si
NuGet paketini yükleyin:
dotnet add package Microsoft.AspNetCore.Authentication.JwtBearer
Program.cs
using System.Text;
using Microsoft.AspNetCore.Authentication.JwtBearer;
using Microsoft.IdentityModel.Tokens;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddControllers();
string secret = builder.Configuration["ExtensionSecret"]
?? throw new InvalidOperationException("ExtensionSecret not configured");
builder.Services
.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddJwtBearer(options =>
{
options.TokenValidationParameters = new TokenValidationParameters()
{
IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(secret)),
ValidateIssuer = false,
ValidateAudience = false,
ValidateActor = false,
RequireSignedTokens = true,
RequireExpirationTime = true,
ValidateLifetime = true
};
});
var app = builder.Build();
app.UseAuthentication();
app.UseRouting();
app.UseAuthorization();
app.MapControllers();
app.Run();
API Denetleyicisi:
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
[Route("api/[controller]")]
[Authorize]
public class SampleLogicController : ControllerBase
{
// Requests without a valid token return 401 Unauthorized
}