gpt4 book ai didi

wcf - WCF 服务中的身份验证

转载 作者:行者123 更新时间:2023-12-04 18:30:45 26 4
gpt4 key购买 nike

我在另一台机器上部署了 WCF 服务,我想根据 WCF 服务对客户端进行身份验证。

我做了以下事情:

1) 在 IIS 中,我取消选中匿名访问并选中“集成 Windows 身份验证”复选框。

2) 我的网络配置

 <authentication mode="Windows" />
<bindings>
<basicHttpBinding>
<binding name="BasicHttpBind">
<security mode="TransportCredentialOnly">
<transport clientCredentialType="Ntlm" proxyCredentialType="Ntlm" />
</security>
</binding>
</basicHttpBinding>
</bindings>

3) 在客户端,我按如下方式传递用户凭证:

MyServiceClient _client;

_client = new MyServiceClient();

_client.ClientCredentials.Windows.ClientCredential.UserName = "username";
_client.ClientCredentials.Windows.ClientCredential.Password = "password";
_client.ClientCredentials.Windows.ClientCredential.Domain = "mydomain";

我的问题是如何在服务器端(部署服务的地方)捕获用户名和密码?

如何根据传递的凭据对用户进行身份验证?

目前我正在使用 basichttp 绑定(bind)..这个绑定(bind)是否足以支持安全模型?

最佳答案

在服务器端,您可以使用传入的 Windows 凭据对 Active Directory 进行身份验证,或者您需要使用备用存储来处理用户身份验证。

您可以使用以下方法在您的服务器端代码中访问调用者的身份:

IIdentity caller = ServiceSecurityContext.Current.PrimaryIdentity;

您还可以通过检查

ServiceSecurityContext.Current.WindowsIdentity

如果它为 NULL,则没有传递任何 Windows 凭据 - 否则您可以使用此 Windows 身份来检查谁在调用(姓名等) - 但是您将无法读取用户的密码!您可以查看他的姓名、他所属的组等等。

要使用 Windows/Active Directory 验证,请将 clientCredentialType 设置为“Windows”。您可能必须切换到 wsHttpBinding,甚至更好:netTcpBinding(如果您在防火墙后面的 Windows LAN 上)。

<bindings>
<netTcpBinding>
<binding name="WindowsSecured">
<security mode="Transport">
<transport clientCredentialType="Windows" />
</security>
</binding>
</netTcpBinding>
</bindings>

这样,只有在您的 Windows 域中注册的用户才能调用该服务。任何其他用户都将被拒绝,而无需您进行任何额外的工作。

Windows 用户调用后,您可以查看 ServiceSecurityContext.Current.WindowsIdentity 以了解有关调用者的信息。

检查 MSDN docs有关服务安全上下文可用内容的详细信息,或 Windows identity .

马克

关于wcf - WCF 服务中的身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1356049/

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