Skip to content

Commit 57176d8

Browse files
Forward Authorization header to remote instances
1 parent 6f2f47d commit 57176d8

1 file changed

Lines changed: 22 additions & 6 deletions

File tree

src/ServiceControl/Connection/RemotePlatformConnectionDetailsProvider.cs

Lines changed: 22 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,24 +5,40 @@
55
using System.Net.Http;
66
using System.Text.Json;
77
using System.Threading.Tasks;
8+
using Microsoft.AspNetCore.Http;
89
using Microsoft.Extensions.Logging;
910
using ServiceBus.Management.Infrastructure.Settings;
1011

11-
class RemotePlatformConnectionDetailsProvider(Settings settings, IHttpClientFactory clientFactory, ILogger<RemotePlatformConnectionDetailsProvider> logger)
12+
class RemotePlatformConnectionDetailsProvider(Settings settings, IHttpClientFactory clientFactory, IHttpContextAccessor httpContextAccessor, ILogger<RemotePlatformConnectionDetailsProvider> logger)
1213
: IProvidePlatformConnectionDetails
1314
{
14-
public Task ProvideConnectionDetails(PlatformConnectionDetails connection) =>
15-
Task.WhenAll(
15+
public Task ProvideConnectionDetails(PlatformConnectionDetails connection)
16+
{
17+
var authorizationHeader = httpContextAccessor.HttpContext?.Request.Headers.Authorization.ToString();
18+
19+
return Task.WhenAll(
1620
settings.RemoteInstances
17-
.Select(remote => UpdateFromRemote(remote, connection))
21+
.Select(remote => UpdateFromRemote(remote, connection, authorizationHeader))
1822
);
23+
}
1924

20-
async Task UpdateFromRemote(RemoteInstanceSetting remote, PlatformConnectionDetails connection)
25+
async Task UpdateFromRemote(RemoteInstanceSetting remote, PlatformConnectionDetails connection, string authorizationHeader)
2126
{
2227
var client = clientFactory.CreateClient(remote.InstanceId);
2328
try
2429
{
25-
await using var stream = await client.GetStreamAsync("/api/connection");
30+
var request = new HttpRequestMessage(HttpMethod.Get, "/api/connection");
31+
var hasAuth = !string.IsNullOrEmpty(authorizationHeader);
32+
33+
if (hasAuth)
34+
{
35+
request.Headers.TryAddWithoutValidation("Authorization", authorizationHeader);
36+
}
37+
38+
var response = await client.SendAsync(request);
39+
response.EnsureSuccessStatusCode();
40+
41+
await using var stream = await response.Content.ReadAsStreamAsync();
2642
var document = await JsonDocument.ParseAsync(stream);
2743
foreach (var property in document.RootElement.EnumerateObject())
2844
{

0 commit comments

Comments
 (0)