2011-07-07 10 views
2

WCFの組み込み機能を使用して、WCFの上にある認証サービスの実装を支援しています。WCFで自分の権限を使用するにはどうすればよいですか?

UserRolePermission(私も複合エンティティがあります:UserRoleRolePermissionを)私はすでにのようなテーブルを持っています。

Permissionのオブジェクトは、bool CanRead,bool CanWriteのようなカスタムプロパティを持っています。ロールには多くの権限が含まれています。

これは、承認のためのWCFの既存のフレームワークとどのように結びついていますか?私は可能な限りホイールを再開発しないようにしたいと思います。私自身の許可をどうやって使うのですか?私は、.NETの例からどのように役割が機能するのかを見ることができますが、独自のカスタムPermissionエンティティはありません。正しい方向に私を始めさせるヒントはありますか?

+0

サービスの設定方法(ウェブ上で利用できるのか、ローカルネットワークだけで利用できるのか)と、使用しているバインディングによって異なります。たとえば、サービスがローカルネットワーク上で実行されている場合、NetTcpBindingはWindows IDなどを利用できるはずです。もっと情報を教えていただけますか? :) – Franchesca

答えて

8

This articleは、これを行う通常の方法の概要を示します。基本的には、ユーザーのアクセス許可に関連するデータを含むカスタムプリンシパルをIAuthorizationPolicyに作成し、カスタムプリンシパルをWCF OperationContextにアタッチします。これにより、スレッドの管理方法に関係なく、いつでもThread.CurrentPrincipal経由でこのプリンシパルにアクセスできます。

権限が単にロールメンバーシップに基づいている場合は、PrincipalPermission.Demand()のような標準メカニズムを使用するか、PrincipalPermissionAttributeで操作をラップするだけです。

さらに高度なアクセス許可(Create | Delete | Updateなど)がある場合は、IPermissionを実装するカスタムアクセス許可を作成する方法があります。このアプローチは、価値ベースの権限(例:$ 500までの注文を承認する)のようなものに対してもうまく機能します。コードでは、必要なアクセス許可を作成し、現在のカスタムプリンシパルが許可されているかどうかを確認するためにDemand()を呼び出します。これらのアクセス許可をシリアライズ可能にすることができる場合は、それぞれのアクセス許可を使用する宣言型セキュリティをサポートするコンパニオン属性を作成することもよくあります。

上記のアプローチは、WCFと.NETセキュリティインフラストラクチャとうまく統合されています。IPermissionは、洗練された保守可能なソリューションを提供しています。

+0

こんにちは。同じ問題があります。これを見てください。https://stackoverflow.com/questions/45770217/my-customauthorizationpolicy-evaluate-method-never-fires –

関連する問題