1

当用户通过 facebook 访问画布 url 时,facebook 画布应用程序会获得一个“signed_request”参数。

我如何使用它来验证 servicestack 上的用户,以便我在 servicestack 中获取用户会话。

用户已经注册了该应用程序,并将在 servicestack 用户存储库中拥有记录。

我应该将画布网址设置为 /auth/facebook 吗?带有额外的 ?Continue=/target_url 这会验证用户并将他发送到 target_url 吗?或者我应该处理画布请求,然后使用 AuthService 使用“signed_request”参数对用户进行身份验证?如果是这样的话,我该如何进行呢?

4

1 回答 1

1

以下是我处理此案的方式:

我处理了 FB 画布请求,接收到“signed_request”参数。然后通过解码 BASE64 编码字符串(并使用 HMAC SHA256 进行验证),我得到了 FB userId。

if (isMatch)
{
   string message = UTF8Encoding.UTF8.GetString(msg);
   var output = message.FromJson<Dictionary<string, string>>();
   string user = output["user_id"];
   OAuthTokens tokens = new OAuthTokens();
   tokens.Provider = "facebook";
   tokens.UserId = user;
   UserSession.IsAuthenticated = true;
   ((FacebookAuthProvider)AuthService.GetAuthProvider("facebook")).OnAuthenticated(this, UserSession, tokens, new Dictionary<string, string>());
   return UserSession.ToJson();
}

我不确定这是否是手动获得用户身份验证的最佳方式。但到目前为止,这种技术已经奏效。

于 2013-07-03T16:36:46.813 回答