2016-01-20 3 views
6

私はWCFサービスを設計してテストし、SOAP Webサービスとして公開しています。WCFの異なるサービス操作のための異なるセキュリティ

私はサービスクラスを論理的に分割しました。私はアカウントサービスを持っています。アカウントWebサービスにアクセスするには、ユーザー名とパスワードとAPIトークンを入力する必要があります。私は、認証を気にするためにUserNamePasswordValidatorを拡張するカスタムクラスと、トークンをチェックするためのIDispatchMessageInspectorを書きました。

ユーザーが認証されていない状態でいくつかのアカウントチェックを提供する必要があるところです。論理的には、これらの操作はアカウントサービスに残ります。ただし、サービスBehaviorはusername、passwordを必要とするように設定されており、IDispatchMessageInspectorを追加するIServiceBehaviorがあり、トークンのすべてのマッサージをチェックします。

私はExtending Dispatchers - MicrosoftWCF Extensibility - Carlos Figueira

を経由してさまざまな拡張ポイントのすべてを見直してきた私は、唯一の操作レベルでセキュリティを適用する方法を見つけるように見えることができます。あるいは、特定の機能がセキュリティ/トークンを必要とするようにサービスを構成する方法や、そうでないものもあります。

私はWCFを初めて使っているので、シンプルなものかもしれませんが、見つけられませんでした。さまざまな方法でサービスのさまざまな部分を確保する方法を示す記事が分かっている場合、または方法を知っている場合は、情報を提供してください。ありがとうございました。

+0

このため、セキュリティなしで、または異なるセキュリティ設定を使用して別個のエンドポイント( '無料' /公共サービス)を作成することができます – SalientBrain

+0

どのようにしてそのエンドポイントの操作を制限できますか?認証がない場合は、呼び出すことができるものを制限したい。 – Allan

+0

メインとは異なる特別なインターフェースを持つエンドポイントを公開します(制限付き操作のみ) – SalientBrain

答えて

1

操作レベルでアクセス許可/拒否を許可するには、PrincipalPermission属性を使用してメソッドを設定します。

あなたはこのように使用することができます

[PrincipalPermission(SecurityAction.Demand, Role = "CustomRole")] 

あなたはより多くを読むことができます:ので、何も再コンパイルが必要とされません、あなたはより多くの「柔軟な」何かをしたいと、あなたも役割を使用することができます

[PrincipalPermission(SecurityAction.Demand,Authenticated=false)] 
void NotAutenticationRequiredMethod() 
[PrincipalPermission(SecurityAction.Demand,Authenticated=true)] 
void AuthenticationRequiredMethod() 

ここでは:https://msdn.microsoft.com/en-us/library/ff649821.aspx

メソッドレベルでは、OperationContext.Current.ServiceSecurityContextを確認することもできます。認証されたユーザーからの要求であるかどうかを確認し、何らかの決定を行うオブジェクト。もっとここに

string primaryIdentity = OperationContext.Current.ServiceSecurityContext.PrimaryIdentity.Name; 

string windowsIdentity = OperationContext.Current.ServiceSecurityContext.WindowsIdentity.Name; 

読む:

SecurityContextがが異なる認証を持つことができることを覚えておいてくださいhttps://sankarsan.wordpress.com/2010/07/25/identity-securitycallcontext-in-wcf/

はそれがお役に立てば幸いです。

+0

ありがとうございます。役割は私の問題の一部を解決します。トークンはどうですか? 2つの異なる操作では異なるトークンが必要です。今はIMessageInspectorを使用していますが、すべてのメッセージをチェックしていますが、操作レベルでメッセージをどのように捉えることができますか? – Allan

+0

OperationContextオブジェクトでアクセスするトークンを含む認証データ。 MessageHeaderにトークンを渡していますか?その場合は、OperationContext.Current.IncomingMessageHeadersを使用して、ヘッダーの操作レベルでトークンを読み取ることができます。 –

関連する問題