【问题标题】:How to create API key and Secure Key?如何创建 API 密钥和安全密钥?
【发布时间】:2020-04-15 23:17:51
【问题描述】:

通常,如果我使用第三方 api,它们都会给我们两个密钥,它们是:

API Key:一种随机数或 GUID

Pin/安全密钥/等:密码或 OTP 的种类

现在,假设我是第三方并且我希望我的 API 被零售商使用, 我还想创建这些凭据并将其提供给 API 使用者。 我在.net 核心工作。有什么方法可以创建这些,我们还必须应用安全性 或基于令牌的安全性。

我很困惑,因为我不知道如何实现。

当我研究了一些关于堆栈溢出的问题时,他们建议使用thisor this,或者一些使用 HMAC 安全性,但在 HMAC 中,我们必须强制客户端也使用 HMAC,以便可以使用相同的签名匹配。

我的心态很混乱。您能否建议我在.net core 中执行此操作的一些方法

【问题讨论】:

    标签: security .net-core asp.net-core-webapi api-key


    【解决方案1】:

    生成 API 密钥基本上可以分解为仅生成加密随机字符串。 下面的 C# 代码 sn-p 我躺在那里生成一个随机的十六进制字符串:

        using System.Security.Cryptography;
    
        public static string RandomString()
        {
            byte[] randomBytes = new Byte[64];
            using (RandomNumberGenerator rng = new RNGCryptoServiceProvider())
            {
                rng.GetBytes(randomBytes);
            }
            SHA256Cng ShaHashFunction = new SHA256Cng();
            byte[] hashedBytes = ShaHashFunction.ComputeHash(randomBytes);
            string randomString = string.Empty;
            foreach (byte b in hashedBytes)
            {
                randomString += string.Format("{0:x2}", b);
            }
            return randomString;
        }
    

    您可以使用不同的哈希函数轻松更改生成密钥的长度,也可以将十六进制编码切换为 Base64(Convert.ToBase64String(hashedBytes) 将替换 foreach 循环)编码,这在使用 API 时更常见键。

    【讨论】:

    • 生成这个之后,我必须把这个api-key保存在我的数据库中,然后把这个key发给客户端吗?此外,我还必须保密 api。使用我们的 api 的供应商应该在请求的标头中发送这些详细信息?
    • 对您的所有问题都是肯定的。像密码一样,安全密钥必须不惜一切代价在需要的地方使用加密来保密。要应用的确切安全策略在很大程度上取决于您的特定项目,并且可能由您自己决定。但是您可能希望将散列密钥存储在数据库中并使用 API 密钥进行身份验证(如用户名-密码)。 HMAC 可用于确保密钥的安全传输,但它们本身通常不会影响密钥生成。
    猜你喜欢
    • 1970-01-01
    • 2013-09-12
    • 1970-01-01
    • 2017-01-17
    • 1970-01-01
    • 1970-01-01
    • 2012-08-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多