IdentityServer 2 をカスタマイズして、ID フェデレーション機能を Azure AD (Office 365 など) に提供しました。これには、パッシブ リクエスター フロー用の WS-Federation エンドポイントと、アクティブ クライアント用の WS-Trust があります。WS-Trust の MEX エンドポイントは、POST (Lync が使用する場合) と GET (Windows 10 サインインが使用する場合) の両方に応答して、WS-Trust SOAP の WSDL を返す必要があります。残念ながら、HTTP 400: ws-trust system.servicemodel.protocolexception "ネットワークから受信した XML に問題があります" が返されます。
var host = new WSTrustServiceHost(config, baseAddresses);
// add behavior for load balancing support
host.Description.Behaviors.Add(new UseRequestHeadersForMetadataAddressBehavior());
// modify address filter mode for load balancing
var serviceBehavior = host.Description.Behaviors.Find<ServiceBehaviorAttribute>();
serviceBehavior.AddressFilterMode = AddressFilterMode.Any;
serviceBehavior.IncludeExceptionDetailInFaults = true;
System.ServiceModel.Security.WSTrustServiceHost のインスタンスは、WS-Trust への呼び出しを処理し、そのメタデータを処理するために立ち上がっています。WSTrustServiceHost ctor にデフォルトで追加されている ServiceMetadataBehavior を確認すると、HTTP と HTTPS の両方で GET のメタデータが有効になっていることがわかります。 http://referencesource.microsoft.com/#System.ServiceModel/System/ServiceModel/Security/WSTrustServiceHost.cs,8c80389f2532b060,参照
そのため、なぜhttps://myhost.com/issue/wstrust/mexが POST でヒットしたときにメタデータを返し、GET を送信すると 400 を返すのか、少し混乱しています。System.ServiceModel の EnqueueMessageAsyncResult.CompleteParseAndEnqueue() で例外がスローされています http://referencesource.microsoft.com/#System.ServiceModel/System/ServiceModel/Channels/HttpPipeline.cs,b347567a68ab778c,references
どんな助けでも大歓迎です!