X-FACEBOOK-PLATFORM SASL認証メカニズムを使用してFacebookチャット認証を扱っています。
Facebook開発者フォーラムとstackoverflowの質問で説明されているように、ユーザーとパスワードを作成しています。
要点は、ログインできるパスワードとして application_secret を使用する場合ですが、stackoverflow の質問 (以下のリンク) によると、古い REST API メソッド auth.promoteSession から生成されたセッションである必要があります。
デスクトップ アプリケーション jar で application_secret を配布するのを避けるために、古い rest api メソッドを使用したいと考えています。
問題は、auth.promoteSession でどのようにログインできたかということです????
次の投稿を読みましたが、非常に役に立ちました。
http://community.igniterealtime.org/message/205739#205739
X-FACEBOOK-PLATFORM をサポートする Java Asmack ライブラリを使用した XMPP
そして、igniterealtime の投稿に由来するクラス SASLXFacebookPlatformMechanism.java を使用しており、正しく登録されています。
xmpp_login および offline_access 権限があります。また、Remove Deprecated Auth Methods を無効にしたので、古い残りの API メソッドを呼び出すことができます。
したがって、application_secret をパスワードとして使用すると、次のようになります。
<stream:features><mechanisms xmlns="urn:ietf:params:xml:ns:xmpp-sasl"><mechanism>X-FACEBOOK-PLATFORM</mechanism><mechanism>DIGEST-MD5</mechanism></mechanisms></stream:features>
<challenge xmlns="urn:ietf:params:xml:ns:xmpp-sasl">dmVyc2lvbj0xJm1ldGhvZD1hdXRoLnhtcHBfbG9naW4mbm9uY2U9NEIxRUQzNTA5MTQ5MDQxRTE4N0QyNTA0NTUzNjBDQjc=</challenge>
<success xmlns="urn:ietf:params:xml:ns:xmpp-sasl"/>
しかし、auth.promoteSession によって返された値を使用すると、次のようになります。
<stream:features><mechanisms xmlns="urn:ietf:params:xml:ns:xmpp-sasl"><mechanism>X-FACEBOOK-PLATFORM</mechanism><mechanism>DIGEST-MD5</mechanism></mechanisms></stream:features>
<challenge xmlns="urn:ietf:params:xml:ns:xmpp-sasl">dmVyc2lvbj0xJm1ldGhvZD1hdXRoLnhtcHBfbG9naW4mbm9uY2U9MzhFQkUxOTUxNENGRUU4ODc2NzRDREQ0RjhBMUQ0QjI=</challenge>
<failure xmlns="urn:ietf:params:xml:ns:xmpp-sasl"><not-authorized/></failure>