これは重要な問題です。多くのサービスはまだOAuthをサポートしておらず、オプションデータベースにパスワードを保存すると、すべてのWordpressプラグインで読み取り可能になります(上記のコメントを参照)。
これは(まだ)質問に対する本当の答えではありませんが、コメントするには長すぎます。この「解決不可能な」問題に対する「最良の」可能な解決策を考え出すことを目指して、私はこれとの議論を引き起こしたいと思っています。
パスワードの暗号化が可能であると私に思わせる基本的な考え方は次のとおりです。
すべてのユーザーが持っている秘密情報は、Wordpressのパスワードです。秘密情報から派生したパスワードで暗号化されたサードパーティサービスに資格情報を保存し、ユーザーがログインしたときにのみ暗号化を解除できるようにする必要があります。
このようにして、少なくともWordpressのファイルとデータベースのコピーからパスワードを盗むことを不可能にすることが可能になるはずです。すべてのプラグインがログイン中にプレーンテキストのパスワードをキャプチャできるため、資格情報を盗む他のプラグインの問題を解決することはできません。
実際に復号化はかなり簡単です:サードパーティサービスの暗号化されたバージョンがデータベースに既に格納されていると仮定すると、'authenticate'
フィルターにフックするか、wp_authenticate()
関数を上書きすることにより、プレーンテキストユーザーパスワードのソルトハッシュを生成できます(によっての手段wp_hash_password()
)、そのハッシュされたパスワードをユーザーがログアウトするまでプライベートな場所に暗号化キーとして保存し('wp_logout'
フックを使用してキーを削除します)、データベースの暗号化された値を解読するためにサードパーティのパスワードが必要になるたびにそれを使用します。
私はこの作品を作ることができるはずだと感じていますが、いくつかの未解決の問題があります:
- 暗号化の方法は?潜在的に、ユーザーがログアウトして再度ログインし、暗号化を実行するまでプレーンテキストパスワードを保存できます
'authenticate'
。ユーザーは、これが短くなるまでの期間を維持するためにログインするように求められる可能性があります。
- キーを保存する場所とログアウト中にキーを削除する方法
'authenticate'
ユーザーが実際にログインしたときにのみ実行されることを正しく理解していますか?
- ハッシュされたパスワードを保存する方法がある場合、セッションCookieからキーを派生させることができますか?
- パスワードの変更を処理するのは誰ですか?このようなパスワードの変更をキャッチすることは可能であるように思われ、サードパーティのパスワードは新しいパスワードから派生したキーで再暗号化する必要があります。
- マルチユーザーサポートを提供する方法はありますか?理想的には、管理者ユーザーが設定でサードパーティのパスワードを設定できるようにして、それから権限の低いユーザーがサードパーティのサービスとやり取りするために、理想的にはそれらのパスワードを開示しなくても訴えることができます。このため、管理ユーザーは、他のユーザーが自分でのみ生成できるすべてのユーザーのキーを生成できる必要があります。それはどういうわけか可能ですか?