Maison  >  Article  >  développement back-end  >  Explication détaillée de la façon dont Core enregistre élégamment les secrets (User Secrets) dans l'environnement de développement dans ASP.NET

Explication détaillée de la façon dont Core enregistre élégamment les secrets (User Secrets) dans l'environnement de développement dans ASP.NET

黄舟
黄舟original
2017-05-28 10:14:551720parcourir

Cet article présente principalement en détail comment ASP.NET Core enregistre avec élégance les secrets d'utilisateur confidentiels dans l'environnement de développement. Il a une certaine valeur de référence. Les amis intéressés peuvent s'y référer

Avant-propos<.>

Dans le processus de développement d'applications, il est parfois nécessaire de sauvegarder certaines informations confidentielles dans le code, telles que des clés de cryptage, des chaînes ou des noms d'utilisateur et mots de passe. L'approche habituelle consiste à l'enregistrer dans un fichier de configuration. Dans le passé, nous l'enregistrions dans web.config, mais dans ASP.NET Core, cette méthode peut avoir changé, ou vous pouvez avoir des méthodes plus diverses et plus élégantes. configurations pour définir ou enregistrer ces informations confidentielles.

Au début, je pensais que ce

UserSecrets ne servait à rien, car si j'avais besoin de configurer quelque chose, je pouvais le configurer directement dans le fichier appsetting.json jusqu'à ce que Pendant un processus de développement, j'ai ressenti sa véritable utilité.

Répertoire

  • Présentation des secrets d'utilisateur

  • Comment ajouter des secrets d'utilisateur

  • Utilisation des secrets utilisateur dans les applications

  • Résumé


Introduction aux secrets utilisateur

Vous pouvez réfléchir à la façon dont nous avons géré les scénarios suivants dans le code précédent :

  • Vous devez enregistrer certaines clés pour vous connecter à des sites Web tiers, tels que The appkey utilisé par les sites WeChat et Weibo

  • configure différents noms d'utilisateur et mots de passe pour chaque développeur afin d'accéder à certaines ressources

  • développeurs Pendant le processus de développement, utilisez votre propre base de données locale. Comment configurer l'adresse, le compte et le mot de passe de la base de données


En supposant le dernier élément, chaque développement doit utiliser sa propre base de données locale, pourriez-vous dire. laissez chacun modifier son propre web.config, mais ne le soumettez pas lors de la soumission du code. Ainsi, si vous ajoutez d'autres éléments de configuration à web.config, il est évidemment déraisonnable de ne pas soumettre le fichier web.config.

Maintenant, ASP.NET Core fournit une manière très élégante et concise de secrets d'utilisateur pour nous aider à résoudre ce problème.

Lorsque vous créez une nouvelle application Web ASP.NET Core, vous verrez ce code dans le fichier

Startup.cs  :


public Startup(IHostingEnvironment env) 
{
  .....

  if (env.IsDevelopment())
  {
    builder.AddUserSecrets();
  }
  
  builder.AddEnvironmentVariables();
}
Dans le fichier

project.json , vous verrez quelques configurations liées aux secrets d'utilisateur


{
  "userSecretsId": "aspnet-WebAppCore-e278c40f-15bd-4c19-9662-541514f02f3e"
  ...
  
  "Microsoft.Extensions.Configuration.UserSecrets": "1.0.0",
  "Microsoft.Extensions.SecretManager.Tools": “1.0.0-preview2-final”
}
Vous pouvez voir

builder.AddUserSecretsCette ligne de code est exécutée dans l'environnement de développement.

userSecretsId est utilisé pour identifier de manière unique les secrets utilisateur du projet. S'il y a deux projets qui doivent utiliser des secrets différents, ils doivent avoir un userSecretsId différent.

Microsoft.Extensions.SecretManager.Tools Principalement utilisé pour définir ou afficher la valeur des secrets.

Comment ajouter des secrets utilisateur

Vous pouvez utiliser la commande dans la ligne de commande pour ajouter :


image

  • Basculez la fenêtre de ligne de commande vers le répertoire d'exécution du programme, entrez

    dotnet user-secrets -h pour afficher les commandes qui peuvent être utilisées

  • Utilisez

    la liste des secrets d'utilisateur dotnet Listez tous les secrets d'utilisateur

  • Utilisez

    les secrets d'utilisateur dotnet définissent WeChatAppKey "X3423FEED2435DD" pour définir un secret utilisateur, où WebChatAppKey est la clé, suivie de la valeur.

  • Utilisez ensuite la

    liste des secrets utilisateur dotnet pour afficher les paires clé-valeur définies.

  • Ensuite, j'ai mis en place une chaîne de connexion à la base de données.

Ce qui précède consiste à utiliser la ligne de commande pour définir les secrets utilisateur. Vous pouvez également utiliser Visual Studio 2015 au lieu de la ligne de commande pour effectuer ce travail.

Dans Visual Studio, faites un clic droit sur le projet Web, vous pouvez voir un menu

Gérer les secrets utilisateur :

image


Lorsque vous cliquez pour ouvrir, un fichier secrets.json apparaîtra, qui contient les paires clé-valeur que vous venez de définir sur la ligne de commande :


image

Certains étudiants peuvent demander puisqu'il s'agit d'un stockage dans secrets.json, où se trouve ce fichier ?

Où est stocké secrets.json ?

Dans les systèmes non Windows, son emplacement de stockage est

~/.microsoft/usersecrets/291d8de402df09abb5ccc62c3f9cde7e/secrets.json

Dans les systèmes Windows, son emplacement est

C:UsersusernameAppDataRoamingMicrosoftUserSecretsaspnet-WebAppCore-e278c40f-15bd-4c19-9662-541514f02f3e

Vous pouvez voir que le dossier de stockage de niveau supérieur est la valeur définie par

userSecretsId dans le fichier project.json.

Utiliser les secrets utilisateur dans les applications

要在应用程序中访问配置的用户机密,你需要保证project.json文件中存在依赖项:
Microsoft.Extensions.Configuration.UserSecrets 并且builder.AddUserSecrets()。

然后在Startup.cs文件中通过 Configuration 对象访问


public IConfigurationRoot Configuration { get; }
public void ConfigureServices(IServiceCollection services)
{
  var wechatKey = Configuration["WeChatAppKey"]
}

你可以使用DI来将用户机密映射到一个C#类文件,像这样

secrets.json


{
  "SecretsKeys":
  {
    WeCharAppKey:"xxejfwert3045",
    WeboAppKey:"35402345lkefgjlkdfg",
    .....
  }
}

SecretsKeysConfig.cs


public class SecretsKeysConfig
{
  public string WeCharAppKey { get; set;}
  
  public string WeboAppKey { get; set;}
  
  // ......
}

Startup.cs


public void ConfigureServices(IServiceCollection services)
{
  services.Configure<SecretsKeysConfig>(Configuration.GetSection("SecretsKeys"));
  
  // 其他代码
}

HomeController.cs


public class HomeController : Controller
{
  public SecretsKeysConfig AppConfigs { get; }
  public HomeController(IOptions<SecretsKeysConfig> appkeys)
  {
    AppConfigs = appkeys.Value;
  }

}

注意:如果你的appsetting.json文件中有和secrets.json文件中相同节点(冲突)的配置项,那么就会被secrets.json中的设置项给覆盖掉,因为 builder.AddUserSecrets()晚于 AddJsonFile("appsettings.json")注册, 那么我们可以利用这个特性来在每个开发人员的机器上重新设置数据库连接字符串了。

总结

以上,或许可以感受到微软在 ASP.NET Core 中对于开发人员还是非常贴心的,很多小细节都考虑到了,因此在我们构建应用程序的过程中,可以多使用这些小功能(特性)来让我们的代码更加的优雅~

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn