2012-04-13 18 views
1

私は石鹸(wcf)を使ってサービスを構築しています。私は単一のパスワードとユーザー名でエンドポイントをより安全にしたいと思っています。次の設定を追加しようとすると、Windows Azureは次のエラーをスローします。Windows Azureの基本認証はクラウドでは機能しませんか?

エラー:この設定セクションはこのパスでは使用できません。これは、セクションが親レベルでロックされている場合に発生します。ロックはデフォルト(overrideModeDefault = "Deny")であるか、またはoverrideMode = "Deny"または従来のallowOverride = "false"のロケーションタグによって明示的に設定されます。

Linecodeは: localyをテストするときに私のIISでこれを変更しなければなりませんでしたが、確かに私はWindows Azureプラットフォームで調整できませんでしたか?

私がしたいことは、自分のパスワードとユーザー名を使ってアクセスしています。

<?xml version="1.0" encoding="UTF-8"?> 
<configuration> 
    <system.diagnostics> 
    <trace> 
     <listeners> 
     <add type="Microsoft.WindowsAzure.Diagnostics.DiagnosticMonitorTraceListener, Microsoft.WindowsAzure.Diagnostics, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" name="AzureDiagnostics"> 
      <filter type="" /> 
     </add> 
     </listeners> 
    </trace> 
    </system.diagnostics> 
    <system.web> 
    <compilation debug="true" targetFramework="4.0" /> 
    <customErrors mode="Off"/> 
    </system.web> 

    <system.serviceModel> 

    <behaviors> 
     <serviceBehaviors> 
     <behavior name="credsBehavior"> 
      <!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment --> 
      <serviceMetadata externalMetadataLocation="external metadata location" /> 

      <!-- To receive exception details in faults for debugging purposes, set the value below to true. Set to false before deployment to avoid disclosing exception information --> 
      <serviceDebug includeExceptionDetailInFaults="false" /> 
      <serviceCredentials> 
      <userNameAuthentication userNamePasswordValidationMode="Custom" customUserNamePasswordValidatorType="WCFServiceWebRole.CustomUserNameValidator, WCFServiceWebRole, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" /> 
      </serviceCredentials> 
     </behavior> 
     </serviceBehaviors> 
     <endpointBehaviors> 
     <behavior name="ServiceEndpointBehavior"> 
      <schemaValidator validateRequest="True" validateReply="False"> 
      <schemas> 
       <add location="schemalocation" /> 
      </schemas> 
      </schemaValidator> 
     </behavior> 
     </endpointBehaviors> 
    </behaviors> 
    <serviceHostingEnvironment multipleSiteBindingsEnabled="false" /> 

    <extensions> 
     <behaviorExtensions> 
     <add name="schemaValidator" type="WCFServiceWebRole.Validation.SchemaValidationBehaviorExtensionElement, WCFServiceWebRole, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"/> 
     </behaviorExtensions> 
    </extensions> 

    <bindings> 
     <basicHttpBinding> 
     <binding name="BasicHttpsBinding_CvServiceInterface" maxBufferSize="2147483647" maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647" receiveTimeout="01:00:00" openTimeout="01:00:00" closeTimeout="01:00:00" sendTimeout="01:00:00"> 
      <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" 
         maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" /> 

      <security mode="Transport"> 
       <transport clientCredentialType="Basic"/> 
      </security> 
     </binding> 
     </basicHttpBinding> 
    </bindings> 

    <services> 
     <service name="WCFServiceWebRole.CvService" behaviorConfiguration="credsBehavior"> 
     <endpoint address="myendpoint" behaviorConfiguration="ServiceEndpointBehavior" binding="basicHttpBinding" bindingConfiguration="BasicHttpsBinding_CvServiceInterface" contract="ICvService" /> 
     </service> 
    </services> 

    </system.serviceModel> 
    <system.webServer> 
    <modules runAllManagedModulesForAllRequests="true"/> 
    <directoryBrowse enabled="true" /> 

    <security> 
     <authentication> 
     <basicAuthentication enabled="true"/> 
     </authentication> 
    </security> 
    </system.webServer> 
</configuration> 

<!--<system.webServer> 
    <security> 
    <authentication> 
     <anonymousAuthentication enabled="false" /> 
     <basicAuthentication enabled="true" /> 
    </authentication> 
    </security> 
</system.webServer>--> 

のJeroen

答えて

1

Sandrinoと同じように、カスタムのユーザー名とパスワードで認証と認証を取得するためにbasicauthは必要ありません。

代わりに:私はホスティングしていたときに

ServiceReference1.CvServiceInterfaceClient cl = new ServiceReference1.CvServiceInterfaceClient(); 
    ClientCredentials creds = new ClientCredentials(); 

    creds.UserName.UserName = "username"; 
    creds.UserName.Password = "password"; 
    var defaultCredentials = cl.Endpoint.Behaviors.Find<ClientCredentials>(); 
    cl.Endpoint.Behaviors.Remove(defaultCredentials); 
    cl.Endpoint.Behaviors.Add(creds); 

のJeroen

1

基本認証では、Windows Azureのウェブ役割で、デフォルトでは利用できません。

enter image description here

あなたは2つの起動スクリプトを作成する必要があります:

PowerShellスクリプトを基本認証に

Import-Module ServerManager 
Add-WindowsFeature Web-Basic-Auth 

注意をインストールするには:これは、Windows Serverに含まれているのPowerShell 2.0が必要です2008 R2(Windows Server 2008 R2を入手するにはosFamilyを2に設定する必要があります:http://msdn.microsoft.com/en-us/library/windowsazure/ee758710.aspx

基本認証が有効になりますbatファイル

%windir%\system32\inetsrv\appcmd set config /section:basicAuthentication /enabled:true 

質問

は、なぜあなたも、基本認証を必要とするでしょうか?私が間違っている場合は私を修正しますが、WCFのUserName/Password認証はIISなしで動作するはずなので、基本認証が必要な理由はわかりません。

+0

私が言ったように、:

<security mode="TransportWithMessageCredential"> <transport clientCredentialType="None"/> <message clientCredentialType="UserName" /> </security> 

クライアント側では:

<security mode="Transport"> <transport clientCredentialType="Basic"/> </security> 

私がしなければなりませんでしたWindows Azure(IISを使用している)での私のサービスは、私は基本認証を使用してエラー。 (なぜなら、前述のように、基本認証は有効になっていないからです)。あなたが私の問題に対する他のアプローチや解決策を知っているなら、私のゲストになれます。私は、サーバー側でユーザー名とパスワードを確認するために、ユーザー名とパスワードを入力するクライアントが必要です。私はこの問題に関して比較的新しいので、 –

+0

web.configからセキュリティ要素を削除することができます。これが問題の原因です。セキュリティはWCFインフラストラクチャに存在します。カスタムユーザー名/パスワード認証を使用するには、このガイドに従ってください。http://blogs.msdn.com/b/pedram/archive/2007/10/05/wcf-authentication-custom-username-and-password-validator.aspx –

関連する問題