基本的に、クライアントの資格情報を次から切り替えることができると思っていたでしょう。
var clientCredentials = new ClientCredentials();
clientCredentials.UserName.UserName = "MyUserName"
clientCredentials.UserName.Password = "MyPassword"
に:
var clientCredentials = new ClientCredentials();
clientCredentials.ClientCertificate.Certificate = myX509Certificate;
次に、wsTrustChannel を作成してセキュリティ トークンを取得します。
wsTrustChannelFactory.SetCredentials(clientCredentials);
var channel = _wsTrustChannelFactory.CreateChannel(new EndpointAddress(endpointAddress));
var token = channel.Issue(new RequestSecurityToken
{
TokenType = tokenType,
AppliesTo = new EndpointReference(realm),
RequestType = RequestTypes.Issue,
KeyType = KeyTypes.Bearer
}, out requestSecurityTokenResponse);
ユーザー名とパスワードは正常に機能します。証明書を使用するだけで、UserName が指定されていないと文句を言います。私は、トークン発行者が関連するユーザーを証明書から検索するという印象を受けました。ここでどこが間違っていますか?