Ошибка аутентификации при реализации аутентификации X-FACEBOOK-PLATFORM с использованием Objective-C и C ++ - PullRequest
0 голосов
/ 17 ноября 2011

Я реализую X-FACEBOOK-PLATFORM XMPP-аутентификацию в Objective C (но использую в основном код C ++) и всегда получаю ошибку: <failure xmlns="urn:ietf:params:xml:ns:xmpp-sasl"><not-authorized/></failure>

У меня зарегистрировано приложение, а Id и Secret:

FacebookId @ "136973476410894" FacebookSecret @ "f6e269fe158b4a04d00ce8b311453ccd"

Я получаю токен сеанса с FBConnect, запрашивая привилегии: @ "publish_stream", @ "xmpp_login", @ "offline_access"

Токен сеанса называется токеном в коде (см. Ниже)

И тогда программа запрашивает механизм аутентификации: <auth xmlns="urn:ietf:params:xml:ns:xmpp-sasl" mechanism="X-FACEBOOK-PLATFORM"/>

Получение вызова: <challenge xmlns="urn:ietf:params:xml:ns:xmpp-sasl">dmVyc2lvbj0xJm1ldGhvZD1hdXRoLnhtcHBfbG9naW4mbm9uY2U9OTAzMTM5MjY2ODk3N0Q0ODMyNDQ2MDY1REMzMTE5RTc=</challenge>

Затем из запроса извлекается тело аутентификации Facebook: version = 1 & method = auth.xmpp_login & nonce = 9031392668977D4832446065DC3119E7. ключ: версия, значение: 1. ключ: метод, значение: auth.xmpp_login. ключ: nonce, значение: 9031392668977D4832446065DC3119E7. маркер: "BAAB8k59ntg4BANNuTHAkjTZBk3pW8pZBD7jWIpZBt8cf65oAT4eDm9euloGCX9NzfF9HwKQxUdEQ15YfeFtkdZAHVpkjL0j4CF0lZCXBKT APIkey: "136973476410894" APISecret: "f6e269fe158b4a04d00ce8b311453ccd"

Используя код снизу, создается ответ:

токен = токен сеанса от FB-соединения: (BAAB8k59ntg4BANNuTHAkjTZBk3pW8pZBD7jWIpZBt8cf65oAT4eDm9euloGCX9NzfF9HwKQxUdEQ15YfeFtkdZAZVxxc0B0C0B0R0B0B0C0R0B0R0B0C0B0C0R0BB)

APIkey = FacebookId (136973476410894);

APISecret = FacebookSecret (f6e269fe158b4a04d00ce8b311453ccd);

string call_id=[[NSString stringWithFormat:@"%0.0f", [[NSDate date] timeIntervalSince1970]] UTF8String];
string signature1 = "api_key=" + APIkey
+ "call_id=" + call_id
+ "method=auth.xmpp_login"
+ "nonce=" + nonce
+ "session_key=" + token
+ "v=1.0"
+ APISecret;

string md = MD5(signature1);

//std::transform(md.begin(), md.end(),md.begin(), ::tolower);
string response2 = "method=auth.xmpp_login&api_key=" + APIkey + "&session_key=" +token + "&call_id=" + call_id + "&sig=" + md + "&v=1.0&" + "nonce=" + nonce;

printf("++base64EncodedResponse response2: %s.\n", response2.c_str());

string response2Base64 = Base64::Encode(response2);

Встроенный ответ: method=auth.xmpp_login&api_key=136973476410894&session_key=BAAB8k59ntg4BANNuTHAkjTZBk3pW8pZBD7jWIpZBt8cf65oAT4eDm9euloGCX9NzfF9HwKQxUdEQ15YfeFtkdZAHVpkjL0j4CF0lZCQeuNTBXrvkbtUXC&call_id=1321457495&sig=5f376192b2dd1f5f928f651a996ce757&v=1.0&nonce=9031392668977D4832446065DC3119E7

Станза отправлено (ответ): <response xmlns="urn:ietf:params:xml:ns:xmpp-sasl">bWV0aG9kPWF1dGgueG1wcF9sb2dpbiZhcGlfa2V5PTEzNjk3MzQ3NjQxMDg5NCZzZXNzaW9uX2tleT1CQUFCOGs1OW50ZzRCQU5OdVRIQWtqVFpCazNwVzhwWkJEN2pXSXBaQnQ4Y2Y2NW9BVDRlRG05ZXVsb0dDWDlOemZGOUh3S1F4VWRFUTE1WWZlRnRrZFpBSFZwa2pMMGo0Q0YwbFpDUWV1TlRCWHJ2a2J0VVhDJmNhbGxfaWQ9MTMyMTQ1NzQ5NSZzaWc9NWYzNzYxOTJiMmRkMWY1ZjkyOGY2NTFhOTk2Y2U3NTcmdj0xLjAmbm9uY2U9OTAzMTM5MjY2ODk3N0Q0ODMyNDQ2MDY1REMzMTE5RTc=</response>

И сервер возвращает: <failure xmlns="urn:ietf:params:xml:ns:xmpp-sasl"><not-authorized/></failure>

Я не знаю, где проблема, мне это кажется правильным, но нет способа аутентификации. Кто-нибудь знает, есть ли способ отладки с сервером причины сбоя? Может быть, приложение еще не в App Store?

Если кто-то может помочь, это было бы очень кстати!

1 Ответ

1 голос
/ 30 ноября 2011

Так как никто не ответил, и кто-то другой может быть обманут этой же ошибкой из-за того, что этот код появляется в некоторых примерах об аутентификации Facebook - я опубликую ответ сам.

Все почти нормально, требуется только пометка тега session_key для access_token в строке signature1 и в строке response2.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...