2011-08-11 14 views
1

「ローカルシステム」アカウント、つまりNT AUTHORITY/SYSTEMで実行されるWindowsサービスの下でホストされるWCFサービスからデータを取得するSilverlightアプリケーションがあります。Windows認証が機能していません。 - ORA-01017:無効なユーザー名/パスワード。ログオンが拒否されました

私はまたとして統合セキュリティ= SSPIを使用して、Oracleの接続文字列でWindows認証を有効にしている私のApp.configファイルに以下

<system.serviceModel> 
<behaviors> 
    <endpointBehaviors> 
    <behavior name="webHttpBehavior"> 
     <webHttp/> 
    </behavior> 
    </endpointBehaviors> 
    <serviceBehaviors> 
    <behavior name="defaultServiceBehavior"> 
     <serviceMetadata httpGetEnabled="true"/> 
     <serviceDebug includeExceptionDetailInFaults="true"/> 
    </behavior> 
    </serviceBehaviors> 
</behaviors> 
<bindings>   
    <basicHttpBinding> 
    <binding name="winAuthBasicHttpBinding" openTimeout="05:00" sendTimeout="05:00" > 
     <security mode="TransportCredentialOnly"> 
     <transport clientCredentialType="Windows"/> 
     </security> 
    </binding> 
    </basicHttpBinding> 
</bindings> 
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true"/> 
<services> 
    <service behaviorConfiguration="defaultServiceBehavior" name="DataService.CrossDomainService"> 
    <endpoint address="" behaviorConfiguration="webHttpBehavior" binding="webHttpBinding" contract="DataService.ICrossDomainService"> 
     <identity> 
     <dns value="107.0.0.12"/> 
     </identity> 
    </endpoint> 
    <host> 
     <baseAddresses> 
     <add baseAddress="http://107.0.0.12:2035/"/> 
     </baseAddresses> 
    </host> 
    </service> 
    <service behaviorConfiguration="defaultServiceBehavior" name="DataService.NewDataService">   
    <endpoint address="" binding="basicHttpBinding" bindingConfiguration="winAuthBasicHttpBinding" contract="DataService.INewDataService"> 
     <identity> 
     <dns value="107.0.0.12"/> 
     </identity> 
    </endpoint> 
    <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/> 
    <host> 
     <baseAddresses> 
     <add baseAddress="http://107.0.0.12:2035/DataService/"/> 
     </baseAddresses> 
    </host> 
    </service> 
</services> 

を使用して、このWCFサービスにWindows認証を有効にしています以下:

<connectionStrings>  
<add name="netTiersConnectionString" connectionString="Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=107.0.0.17)(PORT=1521)))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=SVC001)));Integrated Security=SSPI; Min Pool Size= 1; Max Pool Size= 5;" />  

SilverlightアプリケーションがWCFサービスを呼び出すと、Windows認証を使用するSilverlightアプリケーションのログインユーザーのdomainname/username資格情報ではなく、NT AUTHORITY/SYSTEMアカウントを使用してデータベース接続が行われます。したがって、無効なユーザー名エラーが発生します。

コンソールアプリケーションでWCFサービスをホストすると、同じ構成が正常に機能します。しかし、私はWindowsサービスでホストすると、それはローカルシステムアカウントの下で実行されるので、私はこの問題を推測します。データベース接続がユーザーではなくローカルシステムアカウントでログインしてのWindows認証資格情報を使用して行われるように

私は何ができますか?

おかげで、 パンカジChamria

答えて

1

私は.. CodeProjectの上、返信に対する答えのおかげで見つかっ(here & here参照)

私はOracleデータベースへの呼び出しを行ったすべてのWCFサービスの機能に偽装を強制する必要がありました。これを行う方法は、すべてのOperationContract実装にbelow属性を追加することです。返信用

[OperationBehavior(Impersonation = ImpersonationOption.Required)] 
0

可能なアプローチは、IISを使用してWCFサービスを実行し、あなたになりすまし、それを設定することです:

<configuration> 
    <system.web> 
    <identity impersonate="true" /> 
    </system.web> 
</configuration> 

を私はあなたが同じことを達成できるかどうかを伝えることはできませんWindowsサービスを使用します。

+0

感謝。しかし、IISでそれをホストすることは私の選択肢ではありません。 –

関連する問題