使用 Angular 应用程序配置 SQL Server 数据库连接字符串

问题描述 投票:0回答:1

我正在尝试通过让我自己与 10 多人一起完成的一个大项目重新焕发活力来练习我的全栈技能。我记得在某个时候我了解到有

appsettings.json
appsetings.Development.json
并且你将连接字符串放在那里。

一直让我困惑的问题是我们应该

.gitignore
文件,这样它就不会被暴露,对吗?这是有道理的,但这也意味着我没有这个应用程序运行时的这两个文件,并且我需要以某种方式重新制作它们。我确信我已经启动了数据库并连接到了 azure 服务器,因为我能够对今天早上填充了一些虚拟信息的数据库进行 SQL 查询。

PS C:\Users\my-name> sqlcmd -S appName.database.windows.net,1433 -d appName -U 'SA' -P 'PW'
1> SELECT * FROM companions
2>
3> GO
Msg 208, Level 16, State 1, Server cosminis, Line 1
Invalid object name 'companions'.
1> SELECT * FROM Cosminis.companions
2> Go
companionId user_fk     species_fk  emotion     nickname                       hunger      mood        timeSinceLastChangedMood timeSinceLastChangedHunger timeSinceLastPet        companion_birthday      TimeSinceLastFed
----------- ----------- ----------- ----------- ------------------------------ ----------- ----------- ------------------------ -------------------------- ----------------------- ----------------------- -----------------------
          6           3           1           5 Supernovog!                             50           7  2024-08-02 19:51:38.600    2024-08-02 19:51:38.600 2024-08-02 19:51:38.600 2024-08-02 19:51:38.600 2024-08-02 19:51:38.600
          7           1           4           5 Seth                                    69           6  2024-08-02 19:52:11.037    2024-08-02 19:52:11.037 2024-08-02 19:52:11.037 2024-08-02 19:52:11.037 2024-08-02 19:52:11.037
          9           5           6           5 Asmodeus                                 6           2  2024-08-02 19:52:22.417    2024-08-02 19:52:22.417 2024-08-02 19:52:22.417 2024-08-02 19:52:22.417 2024-08-02 19:52:22.417
         10           4           3           5 Test                                   100           8  2024-08-02 19:52:23.693    2024-08-02 19:52:23.693 2024-08-02 19:52:23.693 2024-08-02 19:52:23.693 2024-08-02 19:52:23.693

(4 rows affected)

所以我知道数据库

  1. 有信息,
  2. 以某种方式连接到我的服务器/API。

使用以下行,我可以通过 swagger 连接到我的应用程序,但它只能在本地运行,不能在我的网站上运行,因为我有文件 .gitignored。我不明白如何将其与用户环境分开。

builder.Services.AddDbContext<CosminisOfficialDBContext>(options => options.UseSqlServer(builder.Configuration.GetConnectionString("ConnectionString")));

任何人都可以帮助我了解我的配置中做错了什么吗?

我想这可能是appsettings.Development.json

{
  "Authentication": {
    "ClientId": "Client",
    "ClientSecret": "Secret",
    "AllowedHosts": [
      "localhost",
      "localhost:5000",
      "localhost:5001"
    ],
    "Attempts": 3,
    "ConnectionStrings": {
      "CS": "Server=tcp:DB.database.windows.net,1433;Initial Catalog=DBNAME;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;Authentication=Active Directory Default;"
    }
  }
}

然后将其用于常规 appsettings.json

{
  "ConnectionStrings": {
    "Devstring": "Devstring;" //Using dotnet user-secrets or something?
  }
}

如何保密我的连接字符串但让我的应用程序在线?

一直在使用 AI 并询问朋友,使用调试器并尝试使用 Swagger UI 以及 Azure 门户中的所有工具。

我在哪里调用API

export const environment = 
{
  production: false, 
  api: 'https://cosminis-fge8geh4gjfdf4ca.eastus-01.azurewebsites.net',
  auth:
  {
    domain: "dev-lj8y5w8u.us.auth0.com",
    clientId: "Lq2lP0EYqPCAqzFtXLYdphFwobokBBw0",
    redirectUri: window.location.origin
  }
};

enter image description here

enter image description here

azure swagger database-connection angular-fullstack
1个回答
0
投票

我们应该

.gitignore
该文件,这样它就不会被暴露,对吗?

  • 是的,
    .gitignore
    文件有助于在您使用 GitHub 时忽略部署到生产环境的文件/文件夹。

如何保密我的连接字符串但让我的应用程序在线?

  • 为了保护ConnectionString,您需要在EnvironmentVariables/UserSecrets(在secrets.json文件中)/

    appettings.Development.json
    (您正在关注的)中设置机密。

  • 对于 Azure 应用服务,请在环境变量部分中设置它们。

  • 对于 Azure 应用服务,请将值设置为 Key Vault 引用,而不是键值对。

请参阅我的 SOThread 将机密存储在 KeyVault 中。

  • 从连接服务配置数据库,您可以看到将其保存在 Azure Key Vault 中的选项。

enter image description here

任何人都可以帮助我了解我的配置中做错了什么吗?

  • 问题出在您的 Azure 应用程序设置上。

  • 应用程序设置的名称必须与您在

    appsettings.json/appsettings.Development.json
    文件中设置的名称相同(并使用相同的名称检索它)。

builder.Configuration.GetConnectionString("Devstring") 

enter image description here

  • 为了验证应用程序服务设置,我将值发送到日志。
var app = builder.Build();

var conn = builder.Configuration.GetConnectionString("Devstring");
var log = app.Services.GetRequiredService<ILogger<Program>>();
log.LogInformation($"ConnectionString from Azure App Service: {conn}");

本地输出: enter image description here

应用服务输出: enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.