代码之家  ›  专栏  ›  技术社区  ›  Roger Lipscombe

使用自定义用户名密码验证程序,我可以终止用户的WPF“会话”吗?

  •  1
  • Roger Lipscombe  · 技术社区  · 16 年前

    我正在使用一个自定义的用户名密码验证器,它实例化并登录到我们的内部API。

    此API公开了一个在“踢”用户(由另一个管理用户)时激发的事件,我希望通过终止WCF会话来响应此事件,以便进一步调用引发异常。

    我该怎么做?

    我的WCF服务托管在Windows服务(而不是IIS)中。实例化和登录内部API需要相当长的时间,所以我不能在每次服务调用时都这样做。

    2 回复  |  直到 15 年前
        1
  •  0
  •   Ladislav Mrnka    16 年前

    如果您希望服务使用用户名和密码对每个用户调用进行身份验证,那么您的验证器中就没有任何代码了。但是,如果您希望使用每会话服务实例,那么您可能还会使用安全上下文(安全会话)。在这种情况下,只有第一个请求通过验证器验证,随后的请求通过在建立安全上下文期间生成的令牌验证。

    编辑:

    每个正在运行的服务都由InstanceContext类表示。如果您有Persession服务,那么每个调用的InstanceContext都是相同的。如果您将对InstanceContext的引用存储在某个地方,那么您应该能够释放实例并关闭会话—我从未尝试过,但应该可以这样做。

        2
  •  0
  •   Roger Lipscombe    15 年前

    我在 http://www.neovolve.com/post/2008/04/07/wcf-security-getting-the-password-of-the-user.aspx 显示如何使用自定义 ServiceCredentials 类,并从那里一直传递用户的详细信息到 Thread.CurrentPrinciple .

    从该代码开始,我将连接对象存储在自定义主体对象中,这意味着我可以在会话上下文中访问它。然后,我添加了一个自定义 CodeAccessSecurityAttribute 它检查连接对象是否已断开连接。如果有,则会引发异常,从而终止用户的会话。

    推荐文章