Pau*_*els 7 .net c# vb.net wcf basic-authentication
我有一个WCF服务的以下调用(使用基本身份验证):
client.ClientCredentials.UserName.UserName = "username";
client.ClientCredentials.UserName.Password = "password";
client.MyServiceFunction();
Run Code Online (Sandbox Code Playgroud)
在服务器上,我有:
class MyService : IMyService
{
string MyServiceFunction()
{
return GetUsernameHere();
}
}
Run Code Online (Sandbox Code Playgroud)
我的问题是,我可以在WCF服务中访问这些凭据,如果是,如何访问?也就是说,我该如何实现这个GetUsernameHere
功能呢?
要使此类验证起作用,您必须为用户名和密码编写自己的验证器.
您创建一个继承自UserNamePasswordValidator
并在webconfig中指定的类,如下所示:
<serviceBehaviors>
<behavior name="CustomValidator">
<serviceCredentials>
<userNameAuthentication
userNamePasswordValidationMode="Custom"
customUserNamePasswordValidatorType=
"SomeAssembly.MyCustomUserNameValidator, SomeAssembly"/>
</serviceCredentials>
</behavior>
</serviceBehaviors>
Run Code Online (Sandbox Code Playgroud)
自定义验证器类将如下所示:
public class MyCustomUserNameValidator : UserNamePasswordValidator
{
public override void Validate(string userName, string password)
{
// Do your username and password check here
}
}
Run Code Online (Sandbox Code Playgroud)
密码在WCF的验证部分之外不可用,因此您只能使用自定义验证器检索密码.
但是,如果您只想要用户名,则应通过以下方式访问:
OperationContext.Current.ServiceSecurityContext.PrimaryIdentity.Name
但是,您可能需要指定<message establishSecurityContext="true" />
作为绑定安全性的一部分,并且这不适用于所有绑定,例如.basicHttpBinding的
<bindings>
<wsHttpBinding>
<!-- username binding -->
<binding name="Binding">
<security mode="Message">
<message clientCredentialType="UserName" establishSecurityContext="true" />
</security>
</binding>
</wsHttpBinding>
</bindings>
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
9217 次 |
最近记录: |