2011-06-21 14 views
1

DotnetOpenAuth経由でOauthによって保護されているWCFサービスで作業しています。WCF:認証が失敗したためにセキュリティトークンの要求を満たすことができませんでした。

どこかに「認証に失敗したためにセキュリティトークンの要求を満たすことができませんでした」というエラーが発生しています。私のコードでは、動作する設定を見つけることができません。

ローカルホストをlocalhostに正しく動作させますが、一度それを自分のサーバー(ドメインではない)に置くと、そのサーバーから自分自身に、またはlocalhostからサーバーには失敗します。

セキュリティを無効にしているように見えるため、このサイトの他のソリューションについては少し心配しています。主に彼らは私のために働いていないようです。

プロバイダ:

<system.serviceModel> 
    <behaviors> 
     <serviceBehaviors> 
      <behavior name="DataApiBehavior"> 
       <serviceMetadata httpGetEnabled="true" /> 
       <serviceDebug includeExceptionDetailInFaults="true" /> 
       <serviceAuthorization serviceAuthorizationManagerType="OAuthServiceProvider.Code.OAuthAuthorizationManager, OAuthServiceProvider" principalPermissionMode="Custom" /> 
      </behavior> 
     </serviceBehaviors> 
    </behaviors> 
    <services> 
     <service behaviorConfiguration="DataApiBehavior" name="OAuthServiceProvider.DataApi"> 
      <endpoint address="" binding="wsHttpBinding" contract="OAuthServiceProvider.Code.IDataApi"> 
       <identity> 
        <dns value="localhost" /> 
       </identity> 
      </endpoint> 
      <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" /> 
     </service> 
    </services> 
    <serviceHostingEnvironment> 
     <baseAddressPrefixFilters> 
      <add prefix="http://devel.nanaimo.ca/" /> 
     </baseAddressPrefixFilters> 
    </serviceHostingEnvironment> 
</system.serviceModel> 

消費者:

<system.serviceModel> 
    <bindings> 
     <wsHttpBinding> 
      <binding name="WSHttpBinding_IDataApi" closeTimeout="00:01:00" 
       openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00" 
       bypassProxyOnLocal="false" transactionFlow="false" hostNameComparisonMode="StrongWildcard" 
       maxBufferPoolSize="524288" maxReceivedMessageSize="65536" 
       messageEncoding="Text" textEncoding="utf-8" useDefaultWebProxy="true" 
       allowCookies="false"> 
       <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384" 
        maxBytesPerRead="4096" maxNameTableCharCount="16384" /> 
       <reliableSession ordered="true" inactivityTimeout="00:10:00" 
        enabled="false" /> 
       <security mode="Message"> 
        <transport clientCredentialType="Windows" proxyCredentialType="None" 
         realm="" /> 
        <message clientCredentialType="Windows" negotiateServiceCredential="true" 
         algorithmSuite="Default" /> 
       </security> 
      </binding> 
     </wsHttpBinding> 
    </bindings> 
    <client> 
     <endpoint address="http://devel.nanaimo.ca/NanaimoProfile/DataApi.svc" 
      binding="wsHttpBinding" bindingConfiguration="WSHttpBinding_IDataApi" 
      contract="CodeServiceOauthProvider.IDataApi" name="WSHttpBinding_IDataApi"> 
      <identity> 
       <dns value="localhost" /> 
      </identity> 
     </endpoint> 
    </client> 
</system.serviceModel> 

更新: OAuthServiceProvider.Code.OAuthAuthorizationManagerがライブに呼び出されていないように見えます。インスタンス化されますが、CheckAccessCoreは呼び出されません。なぜ私はまだ分かりません。

答えて

0

AuthorizationManagerはユーザを認証するために使用され、認証後に呼び出されますが、サービスはデフォルトでWsHttpBindingに設定されています.Windows認証でメッセージセキュリティを使用します。同じドメインに属していないコンピュータ間でWindows認証は機能しません。

デフォルトではセキュリティなし(認証なし)のbasicHttpBindingから開始します。それがうまくいくなら、あなたはどのようなセキュリティが期待されるのか考えることができます。

0

私は結局のところ非常に小さな権利でWindowsのユーザー名とパスワードを作成し、ユーザー名を自分のライブラリにハードコードしました。認定は別の答えだったかもしれませんが、私はそれらを働かせることはありませんでした。

関連する問題