我正在尝试通过让我自己与 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)
所以我知道数据库
使用以下行,我可以通过 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
}
};
我们应该
该文件,这样它就不会被暴露,对吗?.gitignore
.gitignore
文件有助于在您使用 GitHub 时忽略部署到生产环境的文件/文件夹。如何保密我的连接字符串但让我的应用程序在线?
为了保护ConnectionString,您需要在EnvironmentVariables/UserSecrets(在secrets.json文件中)/
appettings.Development.json
(您正在关注的)中设置机密。
对于 Azure 应用服务,请在环境变量部分中设置它们。
对于 Azure 应用服务,请将值设置为 Key Vault 引用,而不是键值对。
请参阅我的 SOThread 将机密存储在 KeyVault 中。
任何人都可以帮助我了解我的配置中做错了什么吗?
问题出在您的 Azure 应用程序设置上。
应用程序设置的名称必须与您在
appsettings.json/appsettings.Development.json
文件中设置的名称相同(并使用相同的名称检索它)。
builder.Configuration.GetConnectionString("Devstring")
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}");
本地输出:
应用服务输出: