1

NpapiBrowserHost.GetAuthenticationInfo メソッドを使用して Firebreath プラグインからユーザー/パスワードを取得しようとしています。

npapi ベースのブラウザー (chrome/firefox/opera) ではこれを行う必要があります。これは私のコードです:

boost::shared_ptr<FB::Npapi::NpapiBrowserHost> npapihost = 
    FB::ptr_cast<FB::Npapi::NpapiBrowserHost>(m_host);
if(npapihost)
{
        char * username = NULL; uint32_t ulen = 0; 
        char * password = NULL; uint32_t plen = 0;
        NPError err = npapihost->GetAuthenticationInfo("http", 
                                               "xxx.yyy.com", 
                                                80, 
                                                "Basic", 
                                                "Knownnameofrealm", 
                                                &username, &ulen, 
                                                &password, &plen );

}

Operaでは動作します。Chrome と Firefox では、err = NPERR_GENERIC_ERROR、ulen = 0、plen = 0 (ユーザー名、パスワード - 不正な ptr) が返されます。

このコードは MypluginnamePlugin::onPluginReady() から実行されます。

資格情報の取得に成功した場合は、コード例を投稿してください。

クロムソースによると、PS Chrome はまだ NPN_GetAuthenticationInfo を実装していませんhttps://code.google.com/p/chromium/issues/detail?id=23928

4

1 に答える 1

2

Firefox では、 http の場合は 80 (https の場合は 443) の代わりに -1を使用する必要があります。

簡単に言えば、FF のパスワード管理サービスはすべての情報をハッシュマップ内に保存していました: マップ エントリ = ( (認証オブジェクトのキー) , (単一ユーザーの認証情報を持つオブジェクト) )

各キーは、次のように作成された文字列です: (いくつかのプロのもの) + (スキーム) + "://" + (ホスト) + ":" + (ポート)。
FF は、新しいマップ エントリの作成中に INTERNET_DEFAULT_HTTP_PORT = 80 (INTERNET_DEFAULT_HTTPS_PORT = 443) を -1 に置き換えました。

Opera では、最初はすべて問題なく動作していました。

Chrome では、2009 年のスタブ作成以降、ブラウザ側のエンドポイント関数は実装されていません。

IE では npapihost は利用できません。デフォルトのCInternetSession(wininetパッケージ)コンストラクターが自動的に行うため、ログイン/パスワードの抽出をいじる必要さえありませんでしたが。

于 2013-07-03T14:57:00.783 に答える