Как декодировать OAuth 2.0 для Canvas signed_request в C #?

Я могу успешно проверить подписанный запрос для приложения Facebook Canvas, используя пример здесь , но я не могу декодировать полезную нагрузку. В документации Facebook указано, что второй параметр в signed_request является объектом JSON в кодировке base64url. В PHP полезная нагрузка декодируется с помощью json_decode:

$data = json_decode(base64_url_decode($payload), true);

Что эквивалентно в C #?

17
задан Community 23 May 2017 в 12:17
поделиться

1 ответ

Следующее должно помочь вам...

(Note: Ссылка на JObject взята из JSON.NET, доступного через http://james.newtonking.com/projects/json-net.aspx и http://json.codeplex.com/)

Используемые пространства имен:

using System;
using System.Collections.Generic;
using System.Text;
using Newtonsoft.Json.Linq; // JSON.NET project 

Код:

public Dictionary<string,string> DecodePayload(string payload)
    {
        var encoding = new UTF8Encoding();
        var decodedJson = payload.Replace("=", string.Empty).Replace('-', '+').Replace('_', '/');
        var base64JsonArray = Convert.FromBase64String(decodedJson.PadRight(decodedJson.Length + (4 - decodedJson.Length % 4) % 4, '='));
        var json = encoding.GetString(base64JsonArray);
        var jObject = JObject.Parse(json);

        var parameters = new Dictionary<string, string>();
        parameters.Add("user_id", (string)jObject["user_id"] ?? "");
        parameters.Add("oauth_token", (string)jObject["oauth_token"] ?? "");
        var expires = ((long?) jObject["expires"] ?? 0);
        parameters.Add("expires", expires > 0 ? expires.ToString() : "") ;
        parameters.Add("profile_id", (string)jObject["profile_id"] ?? "");

        return parameters;
    }

Это то, что я использую в FaceSharp... надеюсь, это поможет

24
ответ дан 30 November 2019 в 10:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: