2011-01-27 11 views
1

WCFサービスバックエンドを持つ大規模なASP.NET 4サイトを作成しています。サイトでログインと承認のためにサービスを使用したいと思います。ASP.NETアクセス許可をWCFサービスに結び付ける方法

基本的に、ユーザーがログインページにアクセスしたときに、メンバーシッププロバイダを使用する代わりに、認証メカニズムとしてWCFサービスを使用する必要があります。

WCFサービスは既に認証と承認(偽装あり)を使用しているため、アクセス許可を持たないサービスメソッドを実行しようとするとエラーが発生します。

質問はどうやってこれをASP.NETサイトと結びつけるのですか?

Webサービスインタフェース:

[ServiceContract] 
public interface IService 
{ 
    [OperationContract] 
    bool Foo(); 

    [OperationContract] 
    void Bar(); 
} 

Webサービス:クライアントで

public class BackEndService : IService 
{ 
    [PrincipalPermission(SecurityAction.Demand, Role="FooRole")] 
    public bool Foo() 
    { 
     return false; 
    } 

    [PrincipalPermission(SecurityAction.Demand, Role="Bar")] 
    public void Bar() 
    { 
     //... 
    } 
} 

public class LoginPage : Page 
{ 
    public void LoginButton_Clicked(object sender, EventArgs e) 
    { 
     string username = TxtUsername.Value; 
     string password = TxtPassword.Value; 

     BackEndService client = new BackEndService(); 
     client.CleintCredentials.Username = username; 
     client.ClientCredentials.Password = password; 

     client.Foo(); //if the credentials supplied do not have permissions there will be error 
     client.Bar(); 
    } 
} 

をここで

は、私が使用していますいくつかのサンプルコードです私が達成しようとしていることPrincipalPermission属性でフラグが立てられたUI要素の機能のいくつかを持って、ユーザーがアクセス権を持っていないことを発見するためにサービスに出かける必要がないようにすることです。

さらに、ユーザーのアクセス許可に基づいてUI要素の一部を読み込み/読み込みしたいと考えています。

ユーザーが表示できるUIモジュールを返すために、サービスに何らかのロジックを書き込む必要がありますか?それは、UI要素のコードの背後でPrincipalPermissionAttributeを使用する場合のように、サービスを介してアクセス許可をMembershipプロバイダのように扱うことが可能ですか?

おかげで、

<bleepzter/> 

答えて

1

あなたがASP.NETメンバーシップを使用したい場合は、あなたのWCFサービスに対して認証するために、独自のメンバシッププロバイダを記述する必要があります。ユーザーが所属するロールの一覧を返すには、WCFサービスに操作を追加する必要があります。次に、Membershipクラスを使用して、ユーザーが特定のロールであるかどうかを判断し、必要に応じてUI要素を非表示または表示できます。

メンバーシッププロバイダの作成の詳細については、http://msdn.microsoft.com/en-us/library/f1kyba5e.aspxを参照してください。

+0

私はそれを恐れていました。私はメンバーシップなしでUIを隠して表示するための自分のロジックをロールバックすると思います。 – bleepzter

関連する問題