2

基本的に、クライアントの資格情報を次から切り替えることができると思っていたでしょう。

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 が指定されていないと文句を言います。私は、トークン発行者が関連するユーザーを証明書から検索するという印象を受けました。ここでどこが間違っていますか?

4

1 に答える 1

1

編集 - ダブルおっと!エンドポイントに UserNameWSTrustBinding を使用していましたが、明らかに CertificateWSTrustBinding を使用する必要がありました。この変更を行うことで、この問題は解決しました。


編集 - 以下のようにこれを解決したと思っていましたが、このエンドポイントでもユーザー名を要求しています。何か案は?


おっと!上記の質問を投稿してから約5分後にこれを解決しました。証明書認証用の別のエンドポイント アドレスがあります。

https://servername/identityserver/issue/wstrust/mixed/certificate

それ以外の

https://servername/identityserver/issue/wstrust/mixed/username
于 2014-03-03T04:40:16.273 に答える