2011-11-16 60 views
0

我在Objective C中实现了X-FACEBOOK-PLATFORM XMPP身份验证(但主要使用C++代码),并且总是失败: <failure xmlns="urn:ietf:params:xml:ns:xmpp-sasl"><not-authorized/></failure>使用Objective-C和C++实现X-FACEBOOK-PLATFORM认证的身份验证失败

我有应用程序登记,编号和密钥如下:

FacebookId @“136973476410894” FacebookSecret @“f6e269fe158b4a04d00ce8b311453ccd”

我检索与FBConnect要求的特权会话令牌: @ “publish_stream”,@ “xmpp_login”,@ “offline_access”

会话令牌被称为令牌代码(见下文)

然后程序要求身份验证机制: <auth xmlns="urn:ietf:params:xml:ns:xmpp-sasl" mechanism="X-FACEBOOK-PLATFORM"/>

接收到挑战:版本= 1种&方法= auth.xmpp_login:<challenge xmlns="urn:ietf:params:xml:ns:xmpp-sasl">dmVyc2lvbj0xJm1ldGhvZD1hdXRoLnhtcHBfbG9naW4mbm9uY2U9OTAzMTM5MjY2ODk3N0Q0ODMyNDQ2MDY1REMzMTE5RTc=</challenge>

然后从挑战中提取的实验证体现时= 9031392668977D4832446065DC3119E7。 键:版本,值:1. key:方法,值:auth.xmpp_login。密钥:nonce,值:9031392668977D4832446065DC3119E7。 令牌: “BAAB8k59ntg4BANNuTHAkjTZBk3pW8pZBD7jWIpZBt8cf65oAT4eDm9euloGCX9NzfF9HwKQxUdEQ15YfeFtkdZAHVpkjL0j4CF0lZCQeuNTBXrvkbtUXC” APIkey: “136973476410894” APISecret: “f6e269fe158b4a04d00ce8b311453ccd”

从响应下面使用代码构建:从FB

令牌=会话令牌连接:(BAAB8k59ntg4BANNuTHAkjTZBk3pW8pZBD7jWIpZBt8cf65oAT4eDm9euloGCX9NzfF9HwKQxUdEQ15YfeFtkdZAHVpkjL0j4CF0lZCQeuNTBXrvkbtUXC)

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

由于没有人做出回应,并且由于此代码出现在关于Facebook身份验证的一些示例中,因此出现同样的错误,因此我会自行发布回复。

一切几乎都已确定,只需要在标签session_key可以在signature1串并在RESPONSE2串改变的access_token