2012-03-03 4 views
0

私は、Entity Frameworkを使用してデータベースにアクセスする従来のアプローチを使用しないMVC 3アプリケーションを作成しています。代わりに、データベースアクセスを管理するために使用されるWCFサービスを組み合わせた別のアプリケーションがあります。今では、MVCアプリケーションでこれらのサービスをデータベースアクセスとして使用したいと考えています。この部分はシンプルです。このシナリオでは、認証と認可の管理が難しくなります。サービスクライアントをデータベースアクセスレイヤーとするASP.NET MVC 3

認証と承認のために、カスタムメンバーシップとロールプロバイダを作成しました。私は必要な方法を実装しましたが、ここで私は問題に遭遇しました。私のサービスでは、ユーザーの役割のリストを取得するためにユーザー名とパスワードが必要です。

ログオン時にユーザーの提供するユーザー名とパスワードをアプリケーションのバックアップのどこかに保存して、保存されていることを確認し、自分の役割プロバイダーで使用できるようにするにはどうすればいいですか?

セッションが正しい選択ですか?もしそうなら、私はどのように私の役割提供者のユーザーのセッションにアクセスできますか?

答えて

1

あなたは決してパスワードを使用しないでください。代わりにパスワードハッシュを使用してください(適切な塩漬けはもちろんです)。これで、ユーザー名とパスワードのハッシュを役割提供者に渡すことができ、必要な役割を許可または拒否するwcfに渡します。

更新

isUserInRoleメソッドはそのようになります。

public class WcfRoleProvider: RoleProvider 
{ 
    public bool IsUserInRole(string username, roleName) 
    { 
     bool result = false; 
     using(WcfRoleService roleService = new WcfRoleService()) 
     { 
      result = roleService.IsUserInRole(username, roleName); 
     } 

     return result; 
    } 
} 
+0

私は、WCFサービスの最後のレベルにパスワードハッシュを使用します。しかし、それはMVCアプリケーションに信用情報を格納する私の問題を解決しません。 – domderen

+0

@Tromaxなぜあなたはそれらを保存したいですか?ユーザーは、認証Cookieを使用してリクエストを行うたびに渡されます。 –

+0

とにかく、あなたのIsUserInRoleメソッドでは、userNameとroleNameだけがパラメータとして使用できます。つまり、設計上、ここでユーザーのパスワードハッシュを持つ必要はありません。あなたはすでにあなたがそのユーザーを認証していることを知っているので、ユーザーの主な関心事はユーザーの持つ役割です。 –