Skip to content

Commit e09577f

Browse files
Add SecurityServiceLocalPort and SecurityServicePort config support for integration testing
Co-authored-by: StuartFerguson <16325469+StuartFerguson@users.noreply.github.com>
1 parent bed3647 commit e09577f

3 files changed

Lines changed: 85 additions & 2 deletions

File tree

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
using System.Diagnostics.CodeAnalysis;
2+
3+
namespace EstateManagementUI.BlazorServer.Common;
4+
5+
public static class AuthenticationHelpers
6+
{
7+
/// <summary>
8+
/// Gets the security service addresses for authentication configuration.
9+
/// This method allows for port overrides to support integration testing scenarios
10+
/// where the security service may be running on different ports.
11+
/// </summary>
12+
/// <param name="authority">The base authority URL</param>
13+
/// <param name="securityServiceLocalPort">Optional local port override (defaults to 5001)</param>
14+
/// <param name="securityServicePort">Optional port override (defaults to 5001)</param>
15+
/// <returns>Tuple containing the authority address and issuer address</returns>
16+
[ExcludeFromCodeCoverage]
17+
public static (string authorityAddress, string issuerAddress) GetSecurityServiceAddresses(
18+
string authority,
19+
string? securityServiceLocalPort,
20+
string? securityServicePort)
21+
{
22+
Console.WriteLine($"authority is {authority}");
23+
Console.WriteLine($"securityServiceLocalPort is {securityServiceLocalPort}");
24+
Console.WriteLine($"securityServicePort is {securityServicePort}");
25+
26+
if (string.IsNullOrEmpty(securityServiceLocalPort))
27+
{
28+
securityServiceLocalPort = "5001";
29+
}
30+
31+
if (string.IsNullOrEmpty(securityServicePort))
32+
{
33+
securityServicePort = "5001";
34+
}
35+
36+
Uri u = new Uri(authority);
37+
38+
var authorityAddress = u.Port switch
39+
{
40+
_ when u.Port.ToString() != securityServiceLocalPort => $"{u.Scheme}://{u.Host}:{securityServiceLocalPort}{u.AbsolutePath}",
41+
_ => authority
42+
};
43+
44+
var issuerAddress = u.Port switch
45+
{
46+
_ when u.Port.ToString() != securityServicePort => $"{u.Scheme}://{u.Host}:{securityServicePort}{u.AbsolutePath}",
47+
_ => authority
48+
};
49+
50+
if (authorityAddress.EndsWith("/"))
51+
{
52+
authorityAddress = authorityAddress.Substring(0, authorityAddress.Length - 1);
53+
}
54+
if (issuerAddress.EndsWith("/"))
55+
{
56+
issuerAddress = issuerAddress.Substring(0, issuerAddress.Length - 1);
57+
}
58+
59+
Console.WriteLine($"authorityAddress is {authorityAddress}");
60+
Console.WriteLine($"issuerAddress is {issuerAddress}");
61+
62+
return (authorityAddress, issuerAddress);
63+
}
64+
}

EstateManagementUI.BlazorServer/Program.cs

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
using EstateManagementUI.BlazorServer.Common;
12
using EstateManagementUI.BlazorServer.Components;
23
using EstateManagementUI.BlazorServer.Services;
34
using EstateManagementUI.BlazorServer.TokenManagement;
@@ -81,8 +82,19 @@
8182
.AddCookie(CookieAuthenticationDefaults.AuthenticationScheme)
8283
.AddOpenIdConnect(OpenIdConnectDefaults.AuthenticationScheme, options =>
8384
{
84-
// Configure OpenID Connect settings from appsettings.json
85-
options.Authority = builder.Configuration["Authentication:Authority"];
85+
// Read configuration values
86+
var authority = builder.Configuration["Authentication:Authority"];
87+
var securityServiceLocalPort = builder.Configuration["AppSettings:SecurityServiceLocalPort"];
88+
var securityServicePort = builder.Configuration["AppSettings:SecurityServicePort"];
89+
90+
// Use helper method to get adjusted addresses for integration testing
91+
var (authorityAddress, issuerAddress) = AuthenticationHelpers.GetSecurityServiceAddresses(
92+
authority,
93+
securityServiceLocalPort,
94+
securityServicePort);
95+
96+
// Configure OpenID Connect settings
97+
options.Authority = authorityAddress;
8698
options.ClientId = builder.Configuration["Authentication:ClientId"];
8799
options.ClientSecret = builder.Configuration["Authentication:ClientSecret"];
88100
options.ResponseType = "code id_token";
@@ -112,6 +124,9 @@
112124
RoleClaimType = "role"
113125
};
114126

127+
// Set MetadataAddress to use the authority address
128+
options.MetadataAddress = $"{authorityAddress}/.well-known/openid-configuration";
129+
115130
// Handle prompt parameter for forcing re-authentication
116131
options.Events = new OpenIdConnectEvents
117132
{

EstateManagementUI.BlazorServer/appsettings.json

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,10 @@
66
}
77
},
88
"AllowedHosts": "*",
9+
"AppSettings": {
10+
"SecurityServiceLocalPort": null,
11+
"SecurityServicePort": null
12+
},
913
"Authentication": {
1014
"Authority": "https://localhost:5001",
1115
"ClientId": "estateUIClient",

0 commit comments

Comments
 (0)