2012-03-07 11 views
2

WCFサービスの「ヘルプ」URLに異なるセキュリティポリシーを適用する必要があります。 WCFサービスの完全なURL、つまりSessionまたはSession.svcを入手するにはどうすればよいですか?WCFヘルプページでの認証なしでのCheckAccessCore(ctx)の変更

http://localhost:62302/Session.svc/help 
http://localhost:62302/Session.svc/help/operations/GetSession 
http://localhost:62302/Session/help 
http://localhost:62302/Session/help/operations/GetSession 

セキュリティに関連しているので、私はコミュニティに対して何かを考え出す必要があります。私は、文字列は「ヘルプ」で終わる場合、単純にチェックし、盲目的に(明らかに間違っていた)そのクエリを許可The author here suggests

コードは、これはオーバーかもしれ

public class APIKeyAuthorization : ServiceAuthorizationManager 
{ 
    protected override bool CheckAccessCore(OperationContext operationContext) 
    { 
     if (this.IsHelpPage(operationContext.RequestContext.RequestMessage) || IsValidAPIKey(operationContext)) 
     { 
      return true; 
     } 
     else 
     { 
      string key = GetAPIKey(operationContext); 

      // Send back an HTML reply 
      CreateErrorReply(operationContext, key); 
      return false; 
     } 
    } 

    private bool IsHelpPage(Message requestMessage) 
    { 
     return requestMessage.Headers.To.AbsolutePath.ToLower().EndsWith("help"); 
    } 
} 

full source

+0

"著者は、文字列が"ヘルプ "で終わっているかどうかを確認し、そのクエリを盲目的に許可するかどうかを単に確認することを提案しています(明らかに間違っています)。うん、 'http://example.com/extremely-sensitive-page?now-i-pwn-you = help'はセキュリティポリシーから免除されるべきだからです。 –

+1

初心者のために明確にするために...マイクは皮肉です;) – LamonteCristo

答えて

0

をチョキ元の質問を単純化しますが、ヘルプセクションを自分の保護されていないエリアに置くのはなぜですか?ヘルプページを提供することだけを目的とするヘルプコントローラを作成することができます。次に、ユーザーが認証なしでヘルプセクションにアクセスできるようにweb.configを設定する必要があります。ここでもこれは過度に単純化されているかもしれませんが、それは価値があります。