Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Serviços de DevOps do Azure | Azure DevOps Server | Azure DevOps Server 2022
Este artigo refere-se apenas à autenticação e segurança para extensões da Web, e não extensões de tarefa Pipelines ou extensões de ponto de extremidade de serviço. Para essas tarefas, você pode usar a tarefa Publicar no Barramento de Serviço do Azure.
Chamar APIs REST a partir da sua extensão
A maioria das extensões precisa chamar APIs REST do Azure DevOps em nome do usuário atual.
Se você estiver usando o , a autenticação será
JavaScript REST clientsprocessada automaticamente para você. Esses clientes solicitam um token de acesso do SDK principal e o definem no cabeçalho Authorization da solicitação.Se você não estiver usando os clientes fornecidos, precisará solicitar um token do
Core SDKe defini-lo no cabeçalho Autorização da sua solicitação:import * as SDK from "azure-devops-extension-sdk"; import { getAccessToken } from "azure-devops-extension-sdk"; SDK.init(); getAccessToken().then((token) => { // Format the auth header const authHeader = `Bearer ${token}`; // Add token as an Authorization header to your request console.log(authHeader); });
Sugestão
Confira nossa documentação mais recente sobre desenvolvimento de extensões usando o SDK de Extensão do Azure DevOps.
Autenticar pedidos ao seu serviço
Um cenário comum é fazer chamadas para um serviço de back-end a partir de uma extensão. Para verificar se essas chamadas são provenientes da sua extensão em execução no Azure DevOps e para autenticar o usuário atual e outras informações de contexto, um tipo especial de token é fornecido à sua extensão. Esse token contém informações sobre o chamador e uma assinatura que você pode validar para garantir que a solicitação tenha origem na sua extensão.
Obtenha a chave da sua extensão
A chave exclusiva da sua extensão, gerada quando a extensão é publicada, pode ser usada para verificar a autenticidade das solicitações feitas a partir da sua extensão.
Para obter essa chave, vá para o portal de gerenciamento de extensão, clique com o botão direito do mouse em uma extensão publicada e selecione Certificado.
Advertência
As alterações de escopo em uma extensão fazem com que o certificado seja alterado. Se você fizer alterações no escopo, precisará de uma nova chave de extensão.
Gere um token para fornecer ao seu serviço
O método Core SDK
getAppTokenretorna uma promessa que, quando resolvida, contém um token assinado com o certificado da sua extensão.import * as SDK from "azure-devops-extension-sdk"; import { getAppToken } from "azure-devops-extension-sdk"; SDK.init(); getAppToken().then((token) => { // Add token to your request console.log(token); });Passe esse token para o seu serviço como um parâmetro de consulta ou cabeçalho de solicitação.
Analise e valide o token
Aqui está um exemplo de análise do token. Primeiro, transfira e guarde o segredo da sua extensão a partir da página do editor. Este segredo deve estar disponível para a sua aplicação.
.NET Framework
Faça a tarefa a seguir para adicionar uma referência para obter o exemplo para compilar.
Abra o Gerenciador de Pacotes NuGet e adicione uma referência ao System.IdentityModel.Tokens.Jwt. Este exemplo foi criado com a versão 6.8.0 deste pacote.
using System;
using System.IdentityModel.Tokens.Jwt;
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.Encoding.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);
// Use the principal object as needed
Console.WriteLine(principal.Identity.Name);
}
}
}
.NET Core - API Web
Faça a tarefa a seguir para adicionar uma referência para obter este exemplo para compilar.
Abra o Gerenciador de Pacotes NuGet e adicione uma referência ao System.IdentityModel.Tokens.Jwt. Este exemplo foi criado com a versão 5.1.4 deste pacote.
Startup.cs
using System.Text;
using Microsoft.AspNetCore.Authentication.JwtBearer;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
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.AddControllers();
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, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseAuthentication();
app.UseAuthorization();
app.UseRouting();
app.UseStaticFiles();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});
}
}
}
Seus controladores de API:
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
[Route("api/[controller]")]
[Authorize]
public class SampleLogicController : ControllerBase
{
// ...
}