0

私は数年前からアプリケーションを書いてきましたが、最近私たちの開発チームの内部ツールとして非常にシンプルなLightswitchアプリケーションを作成しています。現在構築中のWebアプリケーションでdevデータベースを編集します。ビジュアルスタジオのライトスイッチでパスワードハッシュを編集するには

アプリの一部がユーザーテーブルを編集し、データベースのユーザーを追加/編集できる必要があり、少なくとも暗号化されたハッシュをDBに書き込む必要があります。

問題私は、外部のブローフィッシュの実装を使用してパスワードにハッシュと塩を提供していますが、組み込みのものではありません。

これは私が設計した画面のどの入力でも、普通の文字列を受け入れて、カスタム暗号化をデータベースに保存して、計算されたプロパティが私は必要でしたが、そうではありません。

私はVisual Studio 2013企業でC#言語でlightswitchを使用しています。これは.NET 4.5をベースラインとして、SqlServerをバックエンドデータストアとして使用しています。あなたはSilverlightのクライアントを使用しているように、このvalidateメソッドが動作します

namespace LightSwitchApplication 
{ 
    public partial class User 
    { 
     partial void Password_Validate(EntityValidationResultsBuilder results) 
     { 
      this.Password = YourEncryptFunction(this.Password); 
     } 
    } 
} 

乾杯 SHAWTY

+0

HTMLまたはSilverlight LightSwitchクライアントを使用していますか?また、以前に入力した値を表示しても、暗号化されていないプレーンテキストを表示できる必要がありますか? –

+0

デスクトップ/シルバークライアントのchrisです。私は新しい価値を見いだすことができても迷惑をかけることはありませんが、それを使っている人は非常に新しいので、単にパスワードの欄にプレーンテキストのパスワードを追加して保存し、パスワードは暗号化されているため、DBへのアクセスは十分です。 – shawty

答えて

0

遊んだ週末のあと(オフィスでこれほどのことをする機会は決してありません:-))私は、次のような解決策を思いつきました。

私の場合、私が使用した暗号化ライブラリは、「CryptSharp」Crypt Sharp Home Pageですが、私はSilverlightを使用して、デスクトップクライアントを作成していますので、cryptsharpは、完全な.NETランタイムを必要とするため、それにはインストールしないでしょう。

これは、私は、アプリケーションのデータ層でのアクセス持っていたもの調査を開始するために私を導く:いくつかのブログの記事を読んだ後

enter image description here

をし、いくつかのより多くのMSDN、私​​は私がフックできることを考え出しました更新機能

具体的には、データ層にカスタムコードを追加すると、データオブジェクトモデルごとに「更新中」などが表示されます(NuGet経由でCryptSharpを追加した後)。甘くて、単にこれまでにクリックされ、保存する前に、フォームに入力されたものに私の暗号化を適用し

partial void Users_Updating(User entity) 
    { 
     string encryptedPassword = ""; 
     string encryptedSalt = ""; 

     GenerateEncryptedPasswordAndSalt(entity.Password, out encryptedPassword, out encryptedSalt); 

     entity.Password = encryptedPassword; 
     entity.PasswordSalt = encryptedSalt; 
    } 

、その後、暗号化されたパスワードと塩を示すために、フォームを更新します。

実際のパスワードを読み取り専用にして、プレーンテキストのパスワードを入力するためのポップアップが表示されるので、混乱はありませんが、これで問題は解決します。

@Chris Cook - あなたの提案に感謝します。私はもう少し探究しました(私は本当にLightSwitchを正直にすることはあまりありません)。物事の新しい探求はいつも面白いです。どのように私がこれを解決したかについてのコメントがあれば、私はまだプロとの意見を聞くことに興味があります。

1

一つのアプローチは、次のラインに沿って、あなたのパスワード]フィールドのカスタム検証メソッドを使用することですクライアント層とサーバー層の両方

あなたがあなたのコードを強制する必要がある場合のみ、サーバー層(多分それはあなたが以下のように条件付きコンパイルディレクティブで、あなたのコードをラップする必要があります:-)のSilverlightの王国ではサポートされていないので、上で実行されます:

namespace LightSwitchApplication 
{ 
    public partial class User 
    { 
     partial void Password_Validate(EntityValidationResultsBuilder results) 
     { 
#if !SILVERLIGHT 
      this.Password = YourEncryptFunction(this.Password); 
#endif 
     } 
    } 
} 
+0

chrisさん、ありがとうございました。私は、現時点では、実際のデータ層にUserUpdateイベントがいくつか見受けられていることを見ています。私はCryptSharpを暗号化に使用しているので、UIレベルでこれをライブラリ上のSilverlightのチョークとして追加することをあきらめなければならなかった – shawty

+0

こんにちはchris、私は自分の答えを追加しました。あなたはLSよりも明らかに私が持っているより多くのことをやってきました。私はフロントエンドとウェブの土地で多くの時間を過ごしています。 – shawty

関連する問題