我是wcf的新手,但是我们的ogranization要求我开发一个单独的wcf服务,我们的oranization员工和外面的客户都会使用它。
wcf服务将托管在我们的组织电脑中,可以从我们的组织局域网访问,也可以使用互联网。
我们的IT主管希望当我们的员工使用该服务时,他们将通过他们的Windows身份验证凭据,当第三方客户访问时,他们将通过他们的用户名&密码,将根据数据库进行验证。
现在我担心的是我如何设计可以识别我们的员工和第三方用户的服务。
如何编写用于身份验证的代码,当我们的请求来自我们的域时,我将不会验证用户凭据,当请求来自第3部分时,请求将针对数据库进行验证。
给我一些小代码片段,引导我编写验证代码。身份验证例程将检测该请求来自哪里....
请求来自我们的域名或第三方用户?如果第三方然后根据数据库验证用户凭证。
@Michal Ciechan:嗨,谢谢你的回复。
我知道我必须设置两个不同的绑定。一个人将使用我们的域用户,另一个人将使用另一个用户。
我想设计我的服务,它将具有验证方法,它将根据域或数据库验证用户。
服务将接受用户ID&密码谁使用服务和验证方法将只有逻辑来检测用户是否来自我们的域,如果是,那么它将验证用户对域,如果用户从我们这边它将验证用户凭据对数据库。
这里我给出了一个小型服务客户端代码,仅显示人们如何将凭据发送到服务
private static void Main(string[] args)
{
var client = new WcfServiceClient();
client.ClientCredentials.UserName.UserName = username;
client.ClientCredentials.UserName.Password = password;
if(client.IsValid())
{
Console.Write(client.GetData(1));
}
client.Close();
Console.Read();
}
所以现在指导我如何设计我的服务以及isValid函数,它可以检测用户类型。 就像用户来自我们的域或用户来自外面并相应地进行验证。
我的问题是客户端代码在我的情况下会是什么样子。 如何将域用户凭据传递给服务以及如何将副用户凭证传递给服务。 请指导我。感谢
答案 0 :(得分:1)
暴露不同的绑定。
员工使用netTcpBinding
对于客户端,使用Http base binding。
您可以单独更改每个绑定的安全设置
对于自定义用户名+密码身份验证,您可以实现UserNamePasswordValidator。
请参阅How to: Use a Custom User Name and Password Validator
示例配置:
<bindings>
<netTcpBinding>
<binding name="SecureService_Tcp"
…
<security mode="Transport">
<transport clientCredentialType="Windows"
protectionLevel="EncryptAndSign" />
<message clientCredentialType="Windows" />
</security>
</binding>
</netTcpBinding>
<wsHttpBinding>
<binding name="SecureService_WsHttp"
<security mode="TransportWithMessageCredential" >
<message clientCredentialType="UserName" />
</security>
</binding>
</wsHttpBinding>
</bindings>