如何创建API密钥和安全密钥?

时间:2019-12-25 07:23:46

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

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

API密钥:一种随机数或GUID

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

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

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

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

我精神错乱。您能否提出一些建议,以便我在.net core中做到这一点

1 个答案:

答案 0 :(得分:0)

基本上可以将生成API密钥分解为仅生成加密随机字符串。 我闲逛的以下C#代码段生成了一个随机的十六进制字符串:

    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​​密钥时很常见。