2016-07-15 21 views
0

しばらく前に私はすべてのアプリケーションを使用しているユーザーをログに記録するWeb APIを作成しました。権限のないアクセス:ウェブAPIでアクセスが拒否されました

devでは、正常に動作します。それは1ヶ月間働き、突然すべてが機能しなくなりました。私の知る限りでは、プロダクトサイトでは何も変わっていません。

私はwebapiを直接打つと、それは動作します。私がapiを呼び出しているサイトを使用しているときに、問題が発生します。

私は、devとprodの間のIIS設定が同じであることを確認しました。 (Windows認証と高度な設定は同じですが、匿名はオフになります)

両方のサイトで同じアプリケーションプール(クライアントサイトとapiサイト)が使用されています。ドメインアカウントをIDとして使用する

私はweb.configとapplicationhost.configのdevとprodのファイル比較を行いましたが、何も普通のようには見えません。

私は何をチェックするかというアイディアが不足しています。

ウェブAPIコントローラ

[Authorize] 
    public class ValuesController : ApiController 
    { 
     public string Get(string samAccountName, bool success, string permissionName) 
     { 
      var returnValue = "Failed"; 

      if (!string.IsNullOrWhiteSpace(samAccountName) && !string.IsNullOrWhiteSpace(permissionName)) 
      { 
        // Do my logging (removed all the try catch etc to simplify thing) 

        returnValue = "Success"; 
      } 

      return returnValue; 
     } 
    } 

コード

は、クライアント上で、APIをヒットする

/// <summary> 
     /// This method calls a web api get method to log the call of the audit 
     /// </summary> 
     /// <param name="authorityName">This is the name of the permission to check</param> 
     /// <param name="success">This is the flag to determine if the call was successful.</param> 
     /// <returns>Returns an Async task</returns> 
     private async Task WriteToAuditLogAsync(string authorityName, bool success) 
     { 
       try 
       { 
        using (var client = new HttpClient(new HttpClientHandler { UseDefaultCredentials = true })) 
        { 
         client.BaseAddress = new Uri(GlobalConfiguration.AuditBaseAddress); 
         client.DefaultRequestHeaders.Accept.Clear(); 
         client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); 

         var values = string.Format(
          CultureInfo.InvariantCulture, GlobalConfiguration.AuditApivalue, 
          this.userName.ToUpper(CultureInfo.InvariantCulture), 
          success.ToString(), 
          authorityName.ToUpper(CultureInfo.InvariantCulture)); 

         // HTTP GET 
         var response = await client.GetAsync(values, HttpCompletionOption.ResponseHeadersRead).ConfigureAwait(false); 

        } 
       } 
       catch (Exception ex) 
       { 
        LogWriter.CriticalError(ex); 
       } 
     } 

<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/> 
<title>401 - Unauthorized: Access is denied due to invalid credentials.</title> 
<style type="text/css"> 
<!-- 
body{margin:0;font-size:.7em;font-family:Verdana, Arial, Helvetica, sans-serif;background:#EEEEEE;} 
fieldset{padding:0 15px 10px 15px;} 
h1{font-size:2.4em;margin:0;color:#FFF;} 
h2{font-size:1.7em;margin:0;color:#CC0000;} 
h3{font-size:1.2em;margin:10px 0 0 0;color:#000000;} 
#header{width:96%;margin:0 0 0 0;padding:6px 2% 6px 2%;font-family:"trebuchet MS", Verdana, sans-serif;color:#FFF; 
background-color:#555555;} 
#content{margin:0 0 0 2%;position:relative;} 
.content-container{background:#FFF;width:96%;margin-top:8px;padding:10px;position:relative;} 
--> 
</style> 
</head> 
<body> 
<div id="header"><h1>Server Error</h1></div> 
<div id="content"> 
<div class="content-container"><fieldset> 
    <h2>401 - Unauthorized: Access is denied due to invalid credentials.</h2> 
    <h3>You do not have permission to view this directory or page using the credentials that you supplied.</h3> 
</fieldset></div> 
</div> 
</body> 
</html> 

はここでweb.configファイルのセクションあるエラーメッセージ

<appSettings> 
    <add key="webpages:Version" value="3.0.0.0" /> 
    <add key="webpages:Enabled" value="false" /> 
    <add key="ClientValidationEnabled" value="true" /> 
    <add key="UnobtrusiveJavaScriptEnabled" value="true" /> 
    </appSettings> 
    <system.web> 
    <compilation debug="true" targetFramework="4.5.2" /> 
    <httpRuntime targetFramework="4.5.2" /> 
    <customErrors mode="Off" /> 
    <authentication mode="Windows" /> 
    </system.web> 
    <system.webServer> 
    <security> 
     <authorization> 
     <clear /> 
     <add accessType="Allow" users="*" /> 
     </authorization> 
    </security> 
    <handlers> 
     <remove name="ExtensionlessUrlHandler-Integrated-4.0" /> 
     <remove name="OPTIONSVerbHandler" /> 
     <remove name="TRACEVerbHandler" /> 
     <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" /> 
    </handlers> 
    </system.webServer> 

devがログイン

2016-07-15 14:26:45 10.9.9.9 GET /ApmApi/api/Values samAccountName=somename&success=True&permissionName=somePermission 80 - 10.9.9.9- - 401 2 5 593 
2016-07-15 14:26:53 10.9.9.9 GET /ApmApi/api/Values samAccountName=somename&success=True&permissionName=somePermission 80 Domain\AppPool 10.9.9.9- - 200 0 0 7015 

のProd IISのログをIIS - 権限が送信されているように思える。..

2016-07-15 17:09:45 10.9.9.8 GET /ApmApi/api/Values samAccountName=somename&success=True&permissionName=somePermission 80 - 10.9.9.8 - - 401 2 5 546 
2016-07-15 17:09:45 10.9.9.8 GET /ApmApi/api/Values samAccountName=somename&success=True&permissionName=somePermission 80 - 10.9.9.8 - - 401 1 3221225581 0 
+0

呼び出し元サイトとAPIサイトが同じサーバー上にある場合、IISループバック防止を実行している可能性があります。 http://serverfault.com/questions/485006/why-cant-i-log-in-to-a-windows-protected-iis-7-5-directory-on-the-server – howcheng

+0

ありがとう、を参照してください。私はオペレーションチームでそれを調べます。私はClientCertificateOption.AutomaticとhttpHandlerも調べます – Lareau

+0

なんらかの理由で、この特定のエラーメッセージが離れて別のものに置き換えられました(私はそれについて新しい質問を投稿します)。 私が学んだことは、ロードバランスされたサイトにヒットしたとき、私は上記のエラーを受け取ります。私がサイトに直接当ったとき、私は404を得る..一息 – Lareau

答えて

0

アプリケーションプールとして統合されていることを確認してください。管理パイプラインモード。

関連する問題