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
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。