2016-04-08 17 views
0

偽装を必要に応じて設定したWCFメソッドを呼び出すWebアプリケーションがあります。この方法では、セキュリティグループを返す別のWebサービス(ASMX)を呼び出す必要があります。問題は、偽装が必須として設定されているため、ASMXサービスのインスタンスを作成しようとするとエラーが発生します。WCF偽装エラーASMXを呼び出す

WCFサービスメソッド

[OperationBehavior(Impersonation = ImpersonationOption.Required)] 
public List<MacroTypeInfo> GetFilteredMacroDataTypes(MacroDataTypeSection section) 
{ 

    // Errors out here 
    using (var login = new local.intranet.webservices.login()) 
    { 
     login.getSecurityGroupsForUser(); // Never gets to this line 
    }  

} 

私が手にエラーが

Either a required impersonation level was not provided, or the provided  
impersonation level is invalid. (Exception from HRESULT: 0x80070542) 

私はこの偽装必要なメソッドこのWebサービスの内部を呼び出すことができるようにしなければならない何か他のものはありますか? OperationBehavior属性を削除すると、呼び出しが機能します。

+0

FWIWあなたはすべきではありません。 –

+0

あなたはこの考え方を拡大できますか? – user3726393

+0

偽装は、文字通り認証と承認に対する最悪の解決策です。 Active Directoryサーバーを介した集中管理を許可したい場合でも、認証する必要のある偽装をAPIとして使用してはなりません。 –

答えて

1

許可されていない限り、サーバーはクライアントをリモートサーバーに偽装することはできません。偽装のさまざまなレベルについて読むことができますhere

このような偽装が必要な場合、クライアントは偽装レベルをDelegationで明示的に許可する必要があります。

あなたは次のエンドポイントの動作設定をWCFクライアントでこれを達成することができます:

client.ChannelFactory.Credentials.Windows.AllowedImpersonationLevel = 
    System.Security.Principal.TokenImpersonationLevel.Delegation; 

:あなたは、プロキシにこの値を設定することができ、生成されたプロキシを使用している場合

<endpointBehaviors> 
    <behavior name="delegateIdentity"> 
     <clientCredentials> 
     <windows allowedImpersonationLevel="Delegation"/> 
     </clientCredentials> 
    </behavior> 
</endpointBehaviors> 

最後に、ChannelFactory<T>を使用してプロキシを作成する場合は、上記と同じ値をChannelFactory<T>に設定することができます。

+0

この呼び出しの偽装を無視する方法はありますか? – user3726393

+0

ログインサービスを管理している場合は、発信者が任意のユーザーのセキュリティグループを取得できるように変更することができます。 –

関連する問題