2012-03-07 50 views
2

我需要在WCF服務上的「幫助」URL上應用一組不同的安全策略。如何獲得WCF服務的完整URL ..即SessionSession.svc修改CheckAccessCore(ctx)以允許WCF身份驗證的WCF幫助頁面

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

「作者在這裏建議我簡單地檢查一下字符串是否以」help「結尾,然後盲目地允許該查詢(顯然是不正確)」。是的,因爲'http://example.com/extremely-sensitive-page?now-i-pwn-you = help'應該免於安全策略。 – 2012-03-08 00:54:31

+1

只是爲了澄清對於外行人而言......邁克正在諷刺;) – LamonteCristo 2012-03-09 15:57:19

回答

0

這可能被高估簡化你的原始問題,但爲什麼不把幫助部分放在它自己的未受保護的區域?您可以創建一個幫助控制器,其唯一目的是提供幫助頁面。然後,您需要配置您的web.config,以允許用戶在沒有身份驗證的情況下訪問幫助部分。這又可能會過度簡化它,但它值得一試。