服务器端的WCF客户端身份验证

问题描述 投票:1回答:1

我的客户端有这样的结构。

WindowsIdentity wi = WindowsIdentity.GetCurrent();
IntPtr token = wi.Token;

下一步是通过WCF向服务器发送身份验证令牌并在那里模拟用户。

api.SendToken(token);

...
...
...

但是,一旦我在服务器端收到令牌并尝试构建WindowsIdentity,它就会抛出一个错误:

WindowsIdentity newId = new WindowsIdentity(token);

Invalid token for impersonation - it cannot be duplicated.

你能帮我解决一下我做错了什么,并分享你的想法如何将令牌从客户端传递给服务器。

谢谢!

wcf authentication impersonation
1个回答
1
投票

WCF已经有内置的管道来支持Windows impersonation.你有没有理由想要推出自己的产品?

更新以避免仅限链接的答案(啊,我年轻时的错误...)

以下是配置内置WCF模拟所需的基本步骤

  • 只有一些绑定支持Windows身份验证。 WSHttpBinding是最常用的支持它,但其他人也可能支持它。
  • 在服务合同上,对需要模拟的方法使用OperationBehavior属性: [OperationBehavior(Impersonation=ImpersonationOption.Required)] public string SomeMethod(string aParameter) { ... }
  • 对于客户端,最简单的方法是创建一个继承自ClientBase类的自定义类。所有服务引用类型都继承自此类。以下是客户端代码的示例: var client = new SomeClientBaseDerivedType("TheServiceEndpoint"); client.ClientCredentials.Windows.AllowedImpersonationLevel = System.Security.Principal.TokenImpersonationLevel.Impersonation;
© www.soinside.com 2019 - 2024. All rights reserved.