我正在设计一个 API(dot net core API),该 API 将由需要访问特定端点的外部系统(主要是服务器)使用。例如,我的 API 有以下端点:
/users
/applications
/clients
我需要确保:
我想使用 API 密钥实现安全的身份验证和授权系统(想避免 OAuth)。
当前方法
{
"api_key": "api_key_A",
"role": "SystemA_Role"
}
{
"roles": {
"SystemA_Role": {
"endpoints": [
"/counterparties",
"/assessments"
]
},
"SystemB_Role": {
"endpoints": [
"/counterparties",
"/reports "
]
}
}
}
**问题:**
这是我找到的关于 API 密钥的示例。正如您所看到的,它创建了一个中间件来验证 httpcontext 中包含的密钥。我们可以知道传入的 url,这是关键,这样我们就可以知道是否应该让请求继续。
这种方法是否符合行业标准、安全且可扩展? 生产环境。
这取决于,假设我们想要实现的应用程序/系统非常简单且稳定,那么我认为使用API密钥是很好的。但如果系统可能变得越来越复杂,那么恐怕这不是一个好的选择,因为密钥本身不包含任何额外的信息。与 JWT token 相比,token 本身包含了很多信息,可以用来验证很多其他信息。
store these keys securely using the Azure key vault service
当然可以,Azure Key Vault 为我们提供了一种存储密钥的新方法。我们需要做的是将身份验证添加到应用程序中,以便应用程序可以连接到 Azure 密钥保管库。例如,就像我上面分享的示例中的中间件一样,我们可以添加下面的代码来获取存储在Azure keyVault中的密钥。我们使用 DefaultAzureCredential 来通过身份验证。
const string secretName = "clientsecret";
var kvUri = "https://keyvaultname.vault.azure.net/";
var a = new DefaultAzureCredential();
var client = new SecretClient(new Uri(kvUri), a);
var secret = await client.GetSecretAsync(secretName);
string secretVaule = secret.Value.Value;
无论如何我更喜欢jwt授权。