gpt4 book ai didi

c# - 如何在 .NET 中使用 Facebook signed_request?

转载 作者:行者123 更新时间:2023-12-03 15:52:35 24 4
gpt4 key购买 nike

我使用 Facebook 作为我的 Web 应用程序 (ASP.NET MVC) 的登录提供程序。
我的登录工作类似于另一个 StackOverflow 帖子 How to securely authorize a user via Facebook's Javascript SDK 。我也分享用户的担忧。
我的登录流程如下:
1. 用户按下登录按钮。
Log in with Facebook
2. 用户必须接受该应用程序。
Accepting the app
3. javascript 回调检索响应。

var authResponse = response.authResponse;
返回的对象:
{
accessToken: "...",
expiresIn: 1234,
signedRequest: "...",
userID: "123456789"
}
听说可以用 signed_request来验证用户的请求,但是网上的例子都是针对PHP的。 如何在 .NET 中执行此操作?

最佳答案

将 Rowan 的答案编译成最终代码:

public static string DecodeSignedRequest(string signed_request)
{
try
{
if (signed_request.Contains("."))
{
string[] split = signed_request.Split('.');

string signatureRaw = FixBase64String(split[0]);
string dataRaw = FixBase64String(split[1]);

// the decoded signature
byte[] signature = Convert.FromBase64String(signatureRaw);

byte[] dataBuffer = Convert.FromBase64String(dataRaw);

// JSON object
string data = Encoding.UTF8.GetString(dataBuffer);

byte[] appSecretBytes = Encoding.UTF8.GetBytes(app_secret);
System.Security.Cryptography.HMAC hmac = new System.Security.Cryptography.HMACSHA256(appSecretBytes);
byte[] expectedHash = hmac.ComputeHash(Encoding.UTF8.GetBytes(split[1]));
if (expectedHash.SequenceEqual(signature))
{
return data;
}
}
}
catch
{
// error
}
return "";
}

private static string FixBase64String(string str)
{
while (str.Length % 4 != 0)
{
str = str.PadRight(str.Length + 1, '=');
}
return str.Replace("-", "+").Replace("_", "/");
}

谢谢罗文!

关于c# - 如何在 .NET 中使用 Facebook signed_request?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21579399/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com