2011-11-09 3 views
1

可能性の重複を保存する方法:
What is the best way to store password in database when API call requires sending of password in plain text?データベースにパスワード

私は現在、おいしい、Zootoolと同様に、ウェブ上のサービスの多くと統合ウェブサイトを構築していますそうです。これらのサービスの中には、OAuthを使用してそれらに安全に接続できるサービスもあります。 Deliciousなどの他のサイトでは、HTTP認証を使用してそれらと通信する必要があります。

これは、パスワードをプレーンテキストに戻すことができるようにパスワードを保存する必要があることを意味します。おそらく、自分のサイトからユーザーのパスワード(ハッシュ)を使って暗号化することはできますが、これはユーザーがパスワード変更後にさまざまなサービスに再度ログインする必要があることを意味します。

優雅なソリューションのアイデアはありますか?

答えて

0

ユーザーパスワードハッシュはDB上ではっきりしているので、同じ問題です。 1つの解決策は、サイトのユーザーパスワードを使用して第三者のパスワードを暗号化することです。ユーザーがパスワードを変更したら、古いパスワードと新しいパスワードを尋ねます。次に、サードパーティのパスワードを古いパスワードで復号化し、新しいパスワードで暗号化します。

これは、他の変数のセッションでユーザーのパスワードをクリアに保存している間のみ有効です。

これにより、dbにクリアパスワードを保存しなくても、メモリにはクリアパスワードが残っています。

+0

しかし、これは、ユーザーが新しいサービスを追加するたびにサイトのパスワードを入力する必要があることを意味します。 –

+0

私の提案は、ユーザーパスワードをRAM(すなわち、ルビ変数)に保存することでした。 DB内の任意の場所に保存すると、ユーザの非暗号化パスワードは、DB内の他のパスワードを暗号化するためにそれを使用することはほとんど役に立たないことに注意してください。 – Paolo

0

データを暗号化して復号化します。たとえば、buildin mysql aes/desメソッドを使用します。

データベースにキーを格納しないようにしてください。

0

OK]をクリックしてMongoidのために、以下のクラスを作成しました:

class User 
    include Mongoid::Document 

    field :password, type: EncryptedString 
end 

どれ懸念:

class EncryptedString < String 
    include Mongoid::Fields::Serializable 

    def deserialize(value) 
    Gibberish::AES.new(ENV['AES_KEY']).decrypt(value) 
    end 

    def serialize(value) 
    Gibberish::AES.new(ENV['AES_KEY']).encrypt(value) 
    end 
end 

私のモデルコードは次のようになりますか?

+0

はモンゴイド3.0では機能しません – Orlando

関連する問題