gpt4 book ai didi

c# - wcf UserNamePasswordValidator 类和客户端证书

转载 作者:太空宇宙 更新时间:2023-11-03 15:00:47 25 4
gpt4 key购买 nike

我在 wcf 中使用自定义 UserNamePassword Validator 来实现安全性。为此,我创建了自签名证书。在尝试使用 Web 服务时,我收到以下错误“无法为 SSL/TLS 安全通道建立信任关系权威”。谷歌搜索了一段时间后,我发现证书需要安装在客户端中。所以我的问题是

1) Is it always required to install certificate on the client even if we used trusted third party?
2) Is it possible to implement UserNamePassword without any certificate?

最佳答案

问题一

不,这不是必需的。

在服务器端你应该添加这样的行为

<behavior name="SecureBehavior">
<serviceMetadata httpGetEnabled="true" />
<serviceCredentials>
<!--
The serviceCredentials behavior allows one to specify a custom validator for username/password combinations.
-->
<userNameAuthentication userNamePasswordValidationMode="Custom"
customUserNamePasswordValidatorType="[Your.Custom.WCFUserValidator], [AssemblyName]"/>
<!--
The serviceCredentials behavior allows one to define a service certificate.
A service certificate is used by a client to authenticate the service and provide message protection.
This configuration references the "localhost" certificate installed during the setup instructions.
-->
<serviceCertificate findValue="[certificateName]" storeLocation="LocalMachine" storeName="My" x509FindType="FindBySubjectName"/>
</serviceCredentials>
</behavior>

然后将行为添加到服务器端点

<service name="[serviceName]" behaviorConfiguration="SecureBehavior">
<endpoint address="" binding="wsHttpBinding" bindingConfiguration="wsSecureConfig"
contract="[ContractName]" />
<endpoint address="/MEX" binding="mexHttpBinding" contract="IMetadataExchange" />
</service>

在客户端,您可以在配置文件中设置服务证书的公共(public)部分,如下所示:

<endpoint address="http://..."
binding="wsHttpBinding"
contract="..."
name="serviceName">
<identity>
<certificate encodedValue="[Encoded Value]" />
</identity>
</endpoint>

获取客户端配置的简单方法是通过 Visual Studio(添加服务引用上下文菜单)在客户端项目中添加对服务的服务引用。这将添加一个配置文件,其中包含可供使用的客户端端点。

Add Service Reference

问题二

如果您使用自定义身份验证,则客户端凭据类型必须设置为用户名。这使用户名和密码能够提交给服务以执行身份验证。是的,您必须使用证书。

关于c# - wcf UserNamePasswordValidator 类和客户端证书,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22279533/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com