Files
Nitload 0ea679932e
Verify / verify (ubuntu-latest, linux-bionic-arm64) (push) Canceled after 0s
Verify / verify (ubuntu-latest, linux-x64) (push) Canceled after 0s
Verify / verify (windows-latest, win-x64) (push) Canceled after 0s
Verify / postgres (push) Canceled after 0s
Build Charac server and client with OIDC, SSH sessions, and packages
2026-10-05 14:02:50 +08:00

55 lines
2.2 KiB
C#

using Microsoft.Extensions.Configuration;
using Charac.Server.Authentication;
namespace Charac.Server.Tests;
public sealed class OidcSettingsTests
{
[Fact]
public void ConfiguredIssuerUsesProviderDiscoveryByDefault()
{
var settings = OidcSettings.FromConfiguration(Configuration(new Dictionary<string, string?>
{
["oidc:issuer"] = "https://auth.example.com/application/o/workspace-access/",
["oidc:client_id"] = "workspace-client"
}));
Assert.Equal("https://auth.example.com/application/o/workspace-access/", settings!.Issuer);
Assert.Equal("workspace-client", settings.ClientId);
Assert.Equal("https://auth.example.com/application/o/workspace-access/.well-known/openid-configuration",
settings.DiscoveryUrl);
}
[Fact]
public void GlobalIssuerCanUseProviderSpecificDiscovery()
{
var settings = OidcSettings.FromConfiguration(Configuration(new Dictionary<string, string?>
{
["oidc:issuer"] = "https://auth.example.com/",
["oidc:client_id"] = "workspace-client",
["oidc:discovery_url"] =
"https://auth.example.com/application/o/workspace-access/.well-known/openid-configuration"
}));
Assert.Equal("https://auth.example.com/", settings!.Issuer);
Assert.Contains("/application/o/workspace-access/", settings.DiscoveryUrl);
}
[Fact]
public void PartialOrInsecureOidcConfigurationIsRejected()
{
Assert.Null(OidcSettings.FromConfiguration(Configuration([])));
Assert.Throws<InvalidOperationException>(() => OidcSettings.FromConfiguration(
Configuration(new Dictionary<string, string?> { ["oidc:issuer"] = "https://auth.example.com/" })));
Assert.Throws<InvalidOperationException>(() => OidcSettings.FromConfiguration(
Configuration(new Dictionary<string, string?>
{
["oidc:issuer"] = "http://auth.example.com/",
["oidc:client_id"] = "workspace-client"
})));
}
private static IConfiguration Configuration(Dictionary<string, string?> values) =>
new ConfigurationBuilder().AddInMemoryCollection(values).Build();
}