¿Cómo se autentica a las personas en sus ASP.NET Core Web API en Ubuntu / Docker dado el error que se describe a continuación?

He encontrado lo que creo que es un error que me impide cargar un X509Certificate2 en Ubuntu o la image del acoplador basado en Debian proporcionada por Microsoft. Esto significa que no puedo inicializar JwtAuthentication en mi API web en estas plataforms, y estoy buscando ayuda:

  1. ¿Está utilizando con éxito JwtAuthentication en Linux?
  2. Si es así, ¿cómo está inicializando un Certificado X509 para JwtBearerOptions?
  3. ¿Puedes ver un problema con lo que estoy haciendo o sugerir una solución alternativa?

He registrado el problema con el equipo de corefx y puede ver la discusión completa aquí , pero a continuación se encuentra la descripción principal del problema:


Tengo una API web ejecutándose en un contenedor acoplable. El contenedor está construido a partir del package 1.1.0 proporcionado:

FROM microsoft/aspnetcore:1.1.0 

y los binarys de la API Web se copyn. La API funciona bien y devuelve los datos como se esperaba hasta que active la authentication, en cuyo punto necesita una X509SecurityKey para establecer el valor de TokenValidationParameters.IssuerSigningKey . Lanza una exception cuando intenta inicializar un X509Certificate2 a partir de un valor de cadena:

  string certValue = certificate.Value; byte[] byteCert = Encoding.ASCII.GetBytes(certValue); return new X509Certificate2(byteCert); 

arroja una OpenSslCryptographicException:

  Unhandled Exception: System.Exception: Failed to extract the Token Signing certificate from the Federation metadata. ---> Interop+Crypto+OpenSslCryptographicException: error:0D07803A:asn1 encoding routines:ASN1_ITEM_EX_D2I:nested asn1 error at Internal.Cryptography.Pal.CertificatePal.FromBlob(Byte[] rawData, String password, X509KeyStorageFlags keyStorageFlags) at System.Security.Cryptography.X509Certificates.X509Certificate..ctor(Byte[] data) at Mercury.Shanetworking.Rest.Authentication.AdfsFederationMetadata.GetSigningCertificate() 

El valor de cadena a partir del cual se inicializa el X509Certificate2 es:

  MIIC4jCCAcqgAwIBAgIQHWt3kGySgJxPtsalC0EoKzANBgkqhkiG9w0BAQsFADAtMSswKQYDVQQDEyJBREZTIFNpZ25pbmcgLSBzdHMuYWxsYW5ncmF5LmNvLnphMB4XDTE2MDkwNzA5MDQyM1oXDTE3MDkwNzA5MDQyM1owLTErMCkGA1UEAxMiQURGUyBTaWduaW5nIC0gc3RzLmFsbGFuZ3JheS5jby56YTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANdq9BEuBRPsTdpngeFyXbfH5lBg5WyENQW0qz2FtDw3AvZhiPdFyvTPZIeZDc4vhg+gPuG8pCxhFa6hPqNIwnLSVuyhUi4/CtZrLghF2wVVcyriijvirzdVp2m56nO31NB5HXbSerTmey1gJsgumr+MiaM2CEI9z5ctwAp66jqM9jVv7kzqIwB33irSck+X97jUa9XVa0/0QPBdrSVUR0i4rmfZ9orRdTKC3IA13bD9duk2Kc9V7t8t/woo80Kbbb3ZseYk5N8AI+7RRw9+oSAm8zZQzBYkNkAMeI1mto1faXsm9Aea4HXbyCbvVOx/JGj5Ki7YK/BtzWAyCgRu0TkCAwEAATANBgkqhkiG9w0BAQsFAAOCAQEAd9rdJ1V9te8njMHiEuvr1DLVUBt2YdpZ8qGFC2rWDKeEW8iARrMfbtrlQovvE1radxoZ2gWR1AaaoEqzmLvF9fEAZ7xjR2P2UlT+ZgntfMn/c+3j7gWnfGNHIjosaYiyF72q4k6bgOx1TV8X08kD2AMBH27utXeeUQTZTd0bUWaWpr76NrDB95k4P6d0t5bkYsguiQjV+2t5/dSvrbTPVbXQmWGyC53IS2OI37AI2bIaeCCDkRHDoxu+L/DtgH8N60k2CLfa+pf0/cxQCR39p4Z+tquVKfYgJIsdZLD6bbrqK9VdpSR2vyUcDLMTGnO0tuDuzBd/xdhJ0GKbnBv3+g== 

El mismo código se ejecuta sin problemas en Windows, creando un certificate de la misma cadena.

Editar: Tenga en count que, si bien inicialmente encontré este problema al ejecutar una image acoplable, las testings posteriores han demostrado que también se produce con Ubuntu 14.04 + .NET Core 1.1.

El problema aquí es que lo que se pasa al constructor son los bytes de la representación base64 de la key, y no los bytes de la key misma.

Si este código funciona en Windows, tal vez sea una buena idea crear un problema en .net core github haciendo reference a este problema.