在 Postgres/Supabase 中生成 HMAC 和安全性

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

我需要使用 Supabase 上的 Postgres 功能为我的用户生成 hmac。我正在运行以下命令,以便在用户请求时在运行时生成它。

create or replace function get_hmac(message text) returns varchar
as $$
     SELECT ENCODE(HMAC(message,'mykey','sha256'),'hex');
$$ language sql;

但是,我不确定这是否安全,因为我的密钥(“mykey”)只是放在那里,暴露给任何有权访问我的 sql 编辑器的人。我该如何解决这个问题?

sql postgresql encryption cryptography supabase
1个回答
0
投票

硬编码值从来都不是一个好主意,因为它们变得分散并增加了泄漏的风险。 在 Supabase 中,您应该使用 Vault 来保存您的所有秘密。

首先您应该安装 Vault 扩展

create extension vault with schema vault;

然后将所需的秘密插入到保险库中

insert into vault.secrets
  (secret, associated)
values
  ('s3kr3t_k3y', 'secretAPIkey');

秘密现在已加密存储在保管库中。 要查看解密的数据,您可以使用:

select * from vault.decrypted_secrets;

要使用它,你应该能够编写如下内容:

create or replace function get_hmac(message text) returns varchar
as $$
  SELECT ENCODE(HMAC(message,
    (SELECT decrypted_secret FROM vault.decrypted_secrets
      WHERE associates = 'secretApiKey') as vault,
    'sha256'
     ),'hex');
$$ language sql;

完整的解释可以在 Supabase 博客网站

找到

另一种选择是使用环境变量,但我认为Vault是一个更好的解决方案。

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