通常,如果我使用第三方api,它们都会给我们两个密钥,它们是:
API密钥:随机数或GUID的种类
Pin /安全密钥/等:密码或OTP的类型
现在,假设我是第三方,并且我希望零售商可以使用我的API,我还想创建这些凭证并将其提供给API使用者。我在.net core中工作。有什么方法可以创建这些,我们也必须应用安全性或基于令牌的安全性。
我很困惑,因为我不知道如何实现。
正如我研究了一些有关堆栈溢出的问题时,他们建议使用this,or this或某些使用HMAC安全性,但是在HMAC中,我们必须强制客户端也使用HMAC,以便可以匹配相同的签名。
我处于混乱状态。能否请您提出一些我可以在.net core中做到的方法
生成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;
}
您可以使用其他哈希函数轻松更改结果密钥的长度,也可以将十六进制编码切换为使用API密钥时更常见的Base64(Convert.ToBase64String(hashedBytes)
,它将取代foreach
循环)编码。