/
aprogrammer
/
reverse-proxy-ms-yarp
Обзор
Документация
Войти
/
aprogrammer
/
reverse-proxy-ms-yarp
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
samples/ReverseProxy.Transforms.Sample/Program.cs
47 строк
2 KB
Chris Ross
Minimal APIs for docs and samples (#2327)
16 ноя 2023, 20:20
Не верифицирован
16 ноя 2023, 20:20
0e438fc
Код
Авторство
О чём код?
// Copyright (c) Microsoft Corporation. // Licensed under the MIT License. using System.Net.Http.Headers; using Microsoft.AspNetCore.Authentication; using Microsoft.AspNetCore.Builder; using Microsoft.Extensions.DependencyInjection; using Yarp.ReverseProxy.Transforms; using Yarp.Sample; var builder = WebApplication.CreateBuilder(args); builder.Services.AddControllers(); builder.Services.AddReverseProxy() .LoadFromConfig(builder.Configuration.GetSection("ReverseProxy")) .AddTransforms<MyTransformProvider>() // Adds custom transforms via code. .AddTransformFactory<MyTransformFactory>() // Adds custom transforms via config. .AddTransforms(transformBuilderContext => // Add transforms inline { // For each route+cluster pair decide if we want to add transforms, and if so, which? // This logic is re-run each time a route is rebuilt. transformBuilderContext.AddPathPrefix("/prefix"); // Only do this for routes that require auth. if (string.Equals("token", transformBuilderContext.Route.AuthorizationPolicy)) { transformBuilderContext.AddRequestTransform(async transformContext => { // AuthN and AuthZ will have already been completed after request routing. var ticket = await transformContext.HttpContext.AuthenticateAsync("token"); var tokenService = transformContext.HttpContext.RequestServices.GetRequiredService<TokenService>(); var token = await tokenService.GetAuthTokenAsync(ticket.Principal); transformContext.ProxyRequest.Headers.Authorization = new AuthenticationHeaderValue("Bearer", token); }); } }); var app = builder.Build(); app.UseAuthentication(); app.UseAuthorization(); // Register the reverse proxy routes app.MapReverseProxy(); app.Run();