3

クレーム対応のWCFサービスとクライアントをまとめようとしています。

私はthinktectureIdentityServerを使用しており、「WCF / SOAPでのトークンの使用」の例を見て、コンソールクライアントをまとめました。

var token = GetSecurityToken();

var binding =
    new WS2007FederationHttpBinding(
        WSFederationHttpSecurityMode.TransportWithMessageCredential);
binding.Security.Message.EstablishSecurityContext = false;

var factory =
    new ChannelFactory<IService1>(
        binding,
        new EndpointAddress("https://localhost:44301/Service1.svc"));
factory.Credentials.SupportInteractive = false;

factory.ConfigureChannelFactory();

var service = factory.CreateChannelWithIssuedToken(token);
var result = service.GetData(42);

私はSTSからの有効なトークンを持っています(どのように見えるか)。

ただし、次のように、への呼び出しで例外がスローGetDataされます。

セキュリティキー識別子のシリアル化中にエラーが発生しました。詳細については、内部の例外を参照してください。

内部例外は次のとおりです。

トークンSerializerは、「System.IdentityModel.Tokens.Saml2AssertionKeyIdentifierClause」をシリアル化できません。これがカスタムタイプの場合は、カスタムシリアライザーを提供する必要があります。

私が見つけることができるこの問題の唯一の言及は、MSDNフォーラムでのこれですが、それはわずかに関連しています。

デバッガーを見ると、エンドポイントの動作には(最終的には)Saml2SecurityTokenHandlerが含まれているように見えます。これは、他のリンクが必要なすべてであることを意味します。

私は何が欠けていますか?

4

2 に答える 2

8

startersts から identityserver v2 にアップグレードし、saml1.1 から saml2 に切り替えたときに、まったく同じ問題が発生しました。

私はプロキシを生成しないので、問題を解決したのは、チャネル ファクトリで Credentials.UseIdentityConfiguration を true に設定するだけでした。おそらく、プロキシを生成する場合、これはデフォルトでは行われませんか? または、カスタム ChannelFactory を使用している場合は、私が行ったように設定するのを忘れただけかもしれません。

var channelFactory = new ChannelFactory<T>(endpointName);
channelFactory.Credentials.UseIdentityConfiguration = true;

var channel = channelFactory.CreateChannelWithIssuedToken(token)

...シリアル化の例外なしでチャネルを使用する

他のディスカッションスレッドが示唆するように、クライアント側に system.identityModel セクションを追加する必要はありません。

于 2013-05-08T16:40:34.620 に答える
0

WCF サービスで WIF が有効になっていますか?

config に次の設定があることを確認してください。

serviceCredentials の動作 - useIdentityConfiguration = true serviceAuthorization の動作 - principalPermissionMode = always

于 2012-07-03T16:00:49.410 に答える