C# 在C中验证来自Slack的请求#

C# 在C中验证来自Slack的请求#,c#,.net-core,slack,slack-api,hmac,C#,.net Core,Slack,Slack Api,Hmac,我遵循的指导方针是 检索HTTP请求上的X-Slack-Request-Timestamp头和请求主体 将版本号、时间戳和请求主体连接起来以形成一个基串。使用冒号作为三个元素之间的分隔符。例如,v0:123456789:command=/weather&text=94070。当前的版本号始终为v0 在用您最喜欢的编程语言实现的HMAC SHA256的帮助下,使用SlackSigning Secret作为密钥,对上述基串进行散列 将此计算签名与请求上的X-Slack-signature头进行比较

我遵循的指导方针是

  • 检索HTTP请求上的
    X-Slack-Request-Timestamp
    头和请求主体
  • 将版本号、时间戳和请求主体连接起来以形成一个基串。使用冒号作为三个元素之间的分隔符。例如,
    v0:123456789:command=/weather&text=94070
    。当前的版本号始终为
    v0
  • 在用您最喜欢的编程语言实现的HMAC SHA256的帮助下,使用Slack
    Signing Secret
    作为密钥,对上述基串进行散列
  • 将此计算签名与请求上的
    X-Slack-signature
    头进行比较
我在C#中的实现是:

string signatureUnencrypted=$“v0:{timestampString}:{body}”;
字节[]哈希值;
使用(HMACSHA256 hmac=new HMACSHA256(Encoding.UTF8.GetBytes(_settings.SigningSecret)))
{
hashValue=hmac.ComputeHash(Encoding.UTF8.GetBytes(signatureUnencrypted));
}
string calculatedSignature=“v0=”+Encoding.UTF8.GetString(hashValue);
if(!string.Equals(calculatedSignature,HttpContext.Request.Headers[“X-Slack-Signature”].ToString())
未经授权返回();
不幸的是,
calculatedSignature
有一堆奇怪的不可读字符,根本就不是UTF8

有什么建议吗

更新 谷歌有这个教程:他们的算法与Slack文档中的完全不同。为什么不同


顺便问一下,你怎么知道你必须应用UTF8?我不知道,我只是猜测而已。@devlord你猜得很糟糕。Google教程清楚地表明,您需要用十六进制编码HMAC。