Попытка использовать токен доступа, сгенерированный в Graph API Explorer, дает неправильные разрешения.C#

Место общения программистов C#
Ответить
Anonymous
 Попытка использовать токен доступа, сгенерированный в Graph API Explorer, дает неправильные разрешения.

Сообщение Anonymous »

Я создал приложение C#, которое отправляет запросы GET/POST к API Facebook Graph для автоматизации загрузки изображений на временную шкалу страниц.

Приложение представляет собой консоль поэтому вход пользователей в систему невозможен с точки зрения входа в Facebook для получения токена доступа, вместо этого я использовал Graph API для генерации токена, и мое приложение расширяет его.
Это работало нормально примерно 12 часов, пока теперь все разрешения неверны.

Когда я генерирую токен в Graph Explorer, я выбираю разрешения «manage_pages», «publish_pages» и «publish_actions». Если использовать Обозреватель графов для выполнения запроса GET к https://graph.facebook.com/v2.3/debug_token с ключом. Я получаю три выбранных разрешения, а также разрешение «public_profile», и все кажется хорошо.< /p>

Когда я запускаю это в своем приложении, и код C# запускает запрос GET к https://graph.facebook.com/v2.3/debug_token, используя тот же токен доступа, который я использовал для запроса, однако, используя собственный ключ доступа приложения, который он генерирует во время выполнения для аутентификации, единственное разрешение, которое я получаю, - это «public_profile», даже если запрос GET к https://graph.facebook. com/v2.3/" + PageID + "/?fields=can_post возвращает, что ключ доступа МОЖЕТ использоваться для публикации, но когда я пытаюсь опубликовать сообщение, мне выдается ошибка о том, что мне не хватает 3 ключевых разрешений я выбрал в первую очередь.

Что происходит?

Для справки, вот функции, которые я использую используя;

//THIS IS THE FUNCTION USED TO CHECK IF THE TOKEN IS VALID
static bool checkValidToken(string inputToken)
{
string url = "https://graph.facebook.com/v2.3/debug_t ... put_token=" + inputToken + "&access_token=" + getAppAccessToken();
WebRequest wrGETURL = WebRequest.Create(url);
Stream objStream = wrGETURL.GetResponse().GetResponseStream();
StreamReader objReader = new StreamReader(objStream);

string jsonResponse = objReader.ReadToEnd();
JObject resonse = (JObject)JObject.Parse(jsonResponse).GetValue("data");
return (bool)resonse.GetValue("is_valid");
}
//THIS IS USED TO CHECK IF THE TOKEN CAN BE USED TO POST TO PAGE
static bool checkCanPost(string inputToken)
{
WebRequest wrGETURL = WebRequest.Create("https://graph.facebook.com/v2.3/" + PageID + "/?fields=can_post&access_token=" + inputToken);
Stream objStream = wrGETURL.GetResponse().GetResponseStream();
StreamReader objReader = new StreamReader(objStream);

string jsonResponse = objReader.ReadToEnd();
JObject resonse = (JObject)JObject.Parse(jsonResponse);
return (bool)resonse.GetValue("can_post");
}
//USED TO CALCULATE THE EXPIRY DATE ON THE TOKEN
static DateTime getExpiryDate(string inputToken)
{

WebRequest wrGETURL = WebRequest.Create("https://graph.facebook.com/v2.3/debug_t ... put_token=" + inputToken + "&access_token=" + getAppAccessToken());
Stream objStream = wrGETURL.GetResponse().GetResponseStream();
StreamReader objReader = new StreamReader(objStream);

string jsonResponse = objReader.ReadToEnd();
JObject resonse = (JObject)JObject.Parse(jsonResponse).GetValue("data");
DateTime expires = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Local).AddSeconds((int)resonse.GetValue("expires_at"));
if ((int)resonse.GetValue("expires_at") == 0)
{
expires = DateTime.UtcNow.AddMonths(2);
}
return expires;
}
//USED TO GENERATE THE APP ACCESS TOKEN
static string getAppAccessToken()
{
WebRequest wrGETURL = WebRequest.Create("https://graph.facebook.com/v2.3/oauth/a ... client_id=" + AppID + "&client_secret=" + AppSecret + "&grant_type=client_credentials");

Stream objStream = wrGETURL.GetResponse().GetResponseStream();
StreamReader objReader = new StreamReader(objStream);

string jsonResponse = objReader.ReadToEnd();
JObject resonse = JObject.Parse(jsonResponse);

return (string)resonse.GetValue("access_token");
}
//USED TO EXTEND AN EXISTING TOKEN
static string extendToken(string inputToken)
{
WebRequest wrGETURL = WebRequest.Create("https://graph.facebook.com/v2.3/oauth/a ... client_id=" + AppID + "&client_secret=" + AppSecret + "&fb_exchange_token=" + inputToken);

Stream objStream = wrGETURL.GetResponse().GetResponseStream();
StreamReader objReader = new StreamReader(objStream);

string jsonResponse = objReader.ReadToEnd();
JObject resonse = JObject.Parse(jsonResponse);
Console.WriteLine(jsonResponse);
return (string)resonse.GetValue("access_token");
}
//USED TO GENERATE A TOKEN FOR POSTING AS THE PAGE, RATHER THAN TO THE PAGE
static string getPageToken(string inputToken)
{
WebRequest wrGETURL = WebRequest.Create("https://graph.facebook.com/v2.3/"+PageI ... inputToken);

Stream objStream = wrGETURL.GetResponse().GetResponseStream();
StreamReader objReader = new StreamReader(objStream);

string jsonResponse = objReader.ReadToEnd();
JObject resonse = JObject.Parse(jsonResponse);

return (string)resonse.GetValue("access_token");
}
//FUNCTION FOR GETTING ALL PERMISSIONS FOR A TOKEN
static List getTokenPermissions(string inputToken)
{
string url = "https://graph.facebook.com/v2.3/debug_t ... put_token=" + inputToken + "&access_token=" + getAppAccessToken();
WebRequest wrGETURL = WebRequest.Create(url);
Stream objStream = wrGETURL.GetResponse().GetResponseStream();
StreamReader objReader = new StreamReader(objStream);

string jsonResponse = objReader.ReadToEnd();
JObject resonse = (JObject)JObject.Parse(jsonResponse).GetValue("data");
JToken scopes = resonse.GetValue("scopes");

List returnList = new List();
foreach (JToken tokrow in scopes)
{
returnList.Add((string)tokrow);
}
return returnList;
}
//DEBUG FUNCTION FOR OUTPUTTING ALL OF A TOKENS USER/PAGE PERMISSIONS
static void outputPermissions(string theToken)
{
List userPermissions = getTokenPermissions(theToken);
List appPermissions = getTokenPermissions(getPageToken(theToken));
Console.WriteLine("USER:");
foreach (string perm in userPermissions)
{
Console.WriteLine(perm);
}
Console.WriteLine("APP:");
foreach (string perm in appPermissions)
{
Console.WriteLine(perm);
}
Console.Read();
}
// FUNCTION THAT ACTUALLY POSTS TO THE PAGE
static async Task PostHandler(Post toPost,string theToken)
{
using (var client = new HttpClient())
{
var values = new Dictionary
{
{ "url", toPost.ImageURL },
{"access_token",getPageToken(theToken)},
{"caption",toPost.Caption}
};
Console.WriteLine("Image we are uploading is " + toPost.ImageURL);
var content = new FormUrlEncodedContent(values);

var response = await client.PostAsync("https://graph.facebook.com/v2.3/" + PageID + "/photos", content);
Console.WriteLine("Uploaded!");
var responseString = await response.Content.ReadAsStringAsync();
Console.WriteLine(responseString);
Console.Read();
JObject resonse = JObject.Parse(responseString);
}
}


Когда сообщение запускается, оно возвращается

error #200 Requires extended permission: (manage_pages and pubish_pages) or (manage_pages and publish_actions)


Подробнее здесь: https://stackoverflow.com/questions/299 ... -incorrect
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»