I'm having issues deserializing a saml.json file, the error is:
Document | Name | Value | Type |
---|
◢ | $exception | {"The SAML configuration couldn't be deserialized."} | ComponentSpace.Saml2.Exceptions.SamlException |
Document | Name | Value | Type |
---|
◢ | InnerException | {"Object reference not set to an instance of an object."} | System.Exception {System.NullReferenceException} |
The code I'm running is:
public void ConfigureServices(IServiceCollection services)
<snipped other service configurations>
string jsonConfigName = "saml-simple.json";
string samlConfigPath = @"C:\Projects\SamlTest";
string jsonFilePath = System.IO.Path.Combine(samlConfigPath, jsonConfigName);
string samlConfigText = System.IO.File.ReadAllText(jsonFilePath);
var configurations = Newtonsoft.Json.JsonConvert.DeserializeObject<SamlConfigurations>(samlConfigText);
// Always fails.
services.AddSaml(samlConfigurations =>
{
samlConfigurations.Configurations = ConfigurationDeserializer.Deserialize(jsonConfigName, samlConfigPath).Configurations;
});
// Works
services.AddSaml(samlConfigurations =>
{
samlConfigurations.Configurations = configurations.Configurations;
});
... and the JSON contents of the file is:
{
"$schema": "
https://www.componentspace.com/schemas/saml-config-schema-v1.0.json", "Configurations": [
{
"ID": "test1",
"LocalServiceProviderConfiguration": {
"Name": "
https://ExampleServiceProvider", "Description": "Example Service Provider",
"AssertionConsumerServiceUrl": "
https://localhost:44360/SAML/AssertionConsumerService", "SingleLogoutServiceUrl": "
https://localhost:44360/SAML/SingleLogoutService", "ArtifactResolutionServiceUrl": "
https://localhost:44360/SAML/ArtifactResolutionService", "LocalCertificates": [
{
"FileName": "certificates/sp.pfx",
"Password": "password"
}
]
},
"PartnerIdentityProviderConfigurations": [
{
"Name": "
https://ExampleIdentityProvider", "Description": "Example Identity Provider",
"SignAuthnRequest": true,
"SignLogoutRequest": true,
"SignLogoutResponse": true,
"WantLogoutRequestSigned": true,
"WantLogoutResponseSigned": true,
"SingleSignOnServiceUrl": "
https://localhost:44313/SAML/SingleSignOnService", "SingleLogoutServiceUrl": "
https://localhost:44313/SAML/SingleLogoutService", "ArtifactResolutionServiceUrl": "
https://localhost:44313/SAML/ArtifactResolutionService", "PartnerCertificates": [
{
"FileName": "certificates/idp.cer"
}
]
}
]
}
]
}
As you can see, this isn't a big problem now, because I used the Newtonsoft library directly, but it would be best to use the supplied method for deserialisation.
Am I missing some additional configuration settings?