Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

727
Views
.NET Core: ¿Cómo acceder al Administrador de credenciales de Windows si se ejecuta en Windows (de lo contrario, ignorar)?

Hasta ahora, para almacenar y recuperar secretos (como credenciales) en aplicaciones .NET, utilicé con éxito el paquete CredentialManagement en Windows. Ahora me gustaría ir multiplataforma.

Por lo tanto, necesito acceder al Administrador de credenciales de Windows desde una aplicación multiplataforma de .NET Core. Si se está ejecutando en Windows, use Credential Manager. Si se está ejecutando en Linux, no se bloquee (use un llavero o lo que sea, ese es el siguiente paso).

¿Cómo se haría esto?

(Nota: estoy abierto a alternativas al Administrador de credenciales de Windows, pero deberían proporcionar el mismo nivel de protección).

over 4 years ago · Santiago Trujillo
2 answers
Answer question

0

Terminé usando la API de protección de datos para Windows (DPAPI) para almacenar secretos en un archivo que está encriptado dentro del alcance del usuario que inició sesión.

Almacenamiento cifrado de una contraseña:

 try { var passwordBytes = Encoding.UTF8.GetBytes(password); var protectedPasswordBytes = ProtectedData.Protect(passwordBytes, null, DataProtectionScope.CurrentUser); var protectedPasswordBytesBase64 = Convert.ToBase64String(protectedPasswordBytes); File.WriteAllText(passwordFilePath, protectedPasswordBytesBase64); } catch (PlatformNotSupportedException) { Debug.WriteLine("Could not store credentials"); }

Descifrado:

 if (File.Exists(passwordFilePath)) { var protectedPasswordBytesBase64 = File.ReadAllText(passwordFilePath); var protectedPasswordBytes = Convert.FromBase64String(protectedPasswordBytesBase64); var passwordBytes = ProtectedData.Unprotect(protectedPasswordBytes, null, DataProtectionScope.CurrentUser); password = Encoding.UTF8.GetString(passwordBytes); }

(Solo funciona en Windows, para otros sistemas operativos usaré otras soluciones).

over 4 years ago · Santiago Trujillo Report

0

Para determinar el sistema operativo en el que se ejecuta su aplicación. Esto puede ayudar, como referencia.

  1. RuntimeInformation.IsOSPlatform(OSPlatform) Método
  2. Propiedad OSPlatform.Windows

Un ejemplo completo para Windows (CredentialManagement + Detect Operating System),

 using CredentialManagement; using System; using System.Diagnostics; using System.Runtime.InteropServices; namespace DetectOSCredentialManagement { class Program { static void Main(string[] args) { if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) { Console.WriteLine("Hello Beauty!"); Program.SetCredentials("FOO", "friday", "fr!d@y0", PersistanceType.LocalComputer); var userpass = Program.GetCredential("FOO"); Console.WriteLine($"User: {userpass.Username} Password: {userpass.Password}"); Program.RemoveCredentials("FOO"); Debug.Assert(Program.GetCredential("FOO") == null); } else if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux)) { Console.WriteLine("Hello Cutie!"); } else if (RuntimeInformation.IsOSPlatform(OSPlatform.OSX)) { Console.WriteLine("Too Costly!"); } } public static UserPass GetCredential(string target) { var cm = new Credential { Target = target }; if (!cm.Load()) { return null; } // UserPass is just a class with two string properties for user and pass return new UserPass(cm.Username, cm.Password); } public static bool SetCredentials( string target, string username, string password, PersistanceType persistenceType) { return new Credential { Target = target, Username = username, Password = password, PersistanceType = persistenceType }.Save(); } public static bool RemoveCredentials(string target) { return new Credential { Target = target }.Delete(); } } public class UserPass { public string Username { get; set; } public string Password { get; set; } public UserPass(string username, string password) { Username = username; Password = password; } } }

System.Security.Permissions : esta dll también es necesaria para ejecutarse por encima de la aplicación.

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!