【问题标题】:How to authorize user in WCF service如何在 WCF 服务中授权用户
【发布时间】:2014-01-02 14:00:14
【问题描述】:

我有 WCF 服务,用户可以在其中添加简单的消息。在服务将消息放入数据库之前,我需要授权用户,如下所示:

    [OperationContract]
    [WebGet(UriTemplate = "/GetMessages/{SessionToken}/{UserPassword}/{UserGLKNumber}")]
    Messages GetMessages(string SessionToken, string UserPassword, string UserGLKNumber);

很明显这个解决方案不好(在url中发送用户密码和号码)。那么,其他方法是什么?

重要的是——我有一个用 Java/PHP/Obj-C(简单的小型应用程序)编写的客户端——反正不是用 C# 编写的。

【问题讨论】:

  • 我建议使用自定义 UserNamePasswordValidator 并使用它,例如 this。注意:此模式不支持令牌,需要在每次服务调用之前验证用户名和密码!
  • 在阅读了那个例子之后,我仍然不清楚..你能给我一些其他的例子吗?问候!
  • 我在自己实现时使用了this 示例。它现在运行良好(我使用控制台应用程序作为消费者)。

标签: c# wcf


【解决方案1】:

编写登录方法并使用 ASP.NET auth cookie(基于表单的身份验证),请参阅this。或者使用Basic认证,让客户端通过http标准方式进行认证。

【讨论】:

    【解决方案2】:

    您必须区分身份验证(它是谁)和授权(他能做什么)。首先,您有多种选择,其中 Windows(用户的登录凭据)或 Basic(用户名 + 密码)是最简单的。这只是服务端的一种配置方式。

    另一方面,授权可以根据身份(是哪个用户)或角色(哪些角色适用于该用户)来完成。后者可以使用 if/else 构造“在代码中”,但也可以使用方法 [PrincipalPermission(SecurityAction.Demand, Role="Administrator")] 上的属性。这指定您“要求”访问该方法的用户具有“角色”管理员(您自己指定)。

    要为身份提供角色,您需要某种角色提供者,显然这不是用户可以提供的。因此,您可以使用 ASP.NET RoleProvider 或介于两者之间的安全令牌服务。

    您可以在此处阅读更多信息:http://msdn.microsoft.com/en-us/library/ff405740.aspx

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-04-09
      • 2011-03-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-29
      • 2013-03-17
      相关资源
      最近更新 更多