質問

WCF 4.0にはアナログクラス/モジュールがあります.WCF REST STARTER KITのRequestIntectorector?

役に立ちましたか?

解決

それを1-1にマッピングするものはありませんが、requestInspectorが実行するほとんどのシナリオを実装するためにWCFコアからIdisPatchMessageInspectorを使用できます。 http://blogs.msdn.com/b/carlosfigueira/art/2011/04/19/2011/04/19/wcf-extensibility-Message-inspectors.aspx メッセージ検査官に関する詳細な情報を持っています。

他のヒント

アップデートで戻ってきた。

私はコードの単純さを価値のあるところで、この問題を正常に解決した後、私はクエリ文字列メソッド以上のものを好むことはできません。 AUTHZメソッドと並行してAUTHESメソッドを呼び出す各サービスエンドポイントに1回の呼び出しをドロップすると、ある程度信じることができます。 とにかく、十分な意見...ソリューションに。このリンクのスタックオーバーフロー上の私たちの目の下にあるが、私たちの文脈ではよく説明されていません...だから私はここにあるサンプルコードのための "user634119"を与えます。 OperationContext

まず、web.configファイルにServiceBehaviorを追加する必要があります。

<behaviors>
  <serviceBehaviors>
    <behavior>
      <serviceAuthenticationManager serviceAuthenticationManagerType="WCF.BasicAuthorization, WCF"></serviceAuthenticationManager>
      <serviceAuthorization impersonateCallerForAllOperations="false" principalPermissionMode="Custom" serviceAuthorizationManagerType="WCF.BasicAuthentication, WCF">
      </serviceAuthorization>
    </behavior>
  </serviceBehaviors>
</behaviors>
.

次にクラスを作成します(上記のServiceBehiviorsブロックで参照されている基本評価と呼ばれます)。

//Authorize the call against the URI resource being requested...
public class BasicAuthorization : ServiceAuthorizationManager
{
    public override bool CheckAccess(OperationContext operationContext, 
    ref Message message)
    {
        //some code
    }
}
.

次に認証クラスを作成:

// Authenticate the header signature as described in my previous post
public class BasicAuthentication : ServiceAuthenticationManager
{
    public override ReadOnlyCollection<IAuthorizationPolicy> Authenticate(
        ReadOnlyCollection<IAuthorizationPolicy> authPolicy, Uri listenUri, 
        ref Message message)
    {
        //some code
    }
}
.

認証方法では、httpRequestMessagePropertyを使用して要求ヘッダの詳細を引き出し、最初の返信で説明されている同じ3つのステップを実行します。

Eduardo、あなたは尋ねました:@carlosfigueira:認証サブシステムを実装するためにそれを使うことができますか?

私はその同じ問題に取り組んでいて、あなたのために少なくとも1つの解決策(下記の)と今後の認可ヘッダーベースの1つを持っています(私はあなたが「傍受」を考えているものです)。

WCF 4 REST WebHTTPプログラミングモデルベースのエンドポイントを保護する最も簡単な方法はこれです。

  1. 各クライアントに共有秘密鍵とAPIキーを発行して、資格情報として使用します。 APIキーはユーザー名と実際に同じです。
  2. SSLを介してすべてのEndSpointsを実行して、チャネル/メッセージ/データのセキュリティを常に持っていることを確認してください。
  3. クライアントに共有シークレットを使用して、タイムスタンプとそのAPIキーを含むHMAC-SHA1(または等化)ハッシュ署名文字列を生成します。
  4. クライアントは、これらのうち3つすべてをクエリ文字列パラメータとして渡す必要があります
    • 署名
    • timestamp
    • APIキー
    • 例: https://127.0.0.1/Restend://127.0.0.1/Restendpoint?sig= {sigstring}&apikey= {apikey}&timestamp= {timestamp}&すべてのあなたの他のパラメータ...
    • あなたのサービス側では、3つの文字列すべてを持つ認証方法を実装します。
      • APIキーを調べ、 がdBまたは他の場所にあるクライアントの共有秘密を返します。
      • Datetime.Nowに対してタイムスタンプを比較して、リクエーションがリプレイ攻撃を妨げるために15分以内ではないことを確認します。
      • それらの3つの文字列を使用して、署名文字列を再作成し、クライアントによって渡されたものにあなたのものを比較します。
      • 一致した場合、要求者は本物です。

        今これを行うためのより良い方法は、それらの3つの文字列を保存し、グローバルなインターセプタ-ishプロセスをすべての要求を監視するためのHTTP認証要求ヘッダーを使用することです。これにより、認証ブロックなしで露出したエンドポイントの可能性が(少なくともそのおそらくおそらくおそらくおそらくおそらく)妨げられます。

        クエリ文字列を使用してこの情報をすべて伝送することは、クエリ文字列に2kの最大長(クライアント/ブラウザによって異なります)があり、クエリ文字列はデバッグ時に読みにくくなります。

        これを行うためのより洗練された方法は、これらの3つの認証文字列をセキュリティトークンサービスエンドポイントにクライアントに渡すことを要求するSTSモデルです。応答メッセージは、3つの文字列の代わりにクライアントが各呼び出しで通過するセッショントークンを返します。クライアントには、各通話でHMACハッシュ署名を生成する必要がないが、サーバー側は依然としてトークンを認証し、セッションの概念はクリーンなRestfulのステートレス動作を維持する必要があります。

        クエリ文字列とAuthヘッダーの両方の方法論を実装するコードブロックを掲示するための最善を尽くします。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top