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);

用户名和密码工作正常,只是使用证书抱怨没有指定用户名。我的印象是令牌发行者会从证书中查找关联的用户。我在哪里错了?

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 回答