【问题标题】:WCF ServiceAuthenticationManager ExtensibilityWCF ServiceAuthenticationManager 可扩展性
【发布时间】:2017-12-14 08:22:54
【问题描述】:

我想为 wcf 实现我的自定义安全性,我想使用 ServiceAuthenticationManager,但我很困惑它如何阻止消息。我试图抛出异常,但那时我无法获得我的异常详细信息,我只是得到“请求休息调用中的错误”和soap调用中的“调用者未通过服务身份验证”,但我无法获取自定义错误错误消息,ServiceAuthenticationManager的正确用法是什么,或者我应该在哪里阻止消息?

public class MyAuthenticationManager :  ServiceAuthenticationManager
{
    public override ReadOnlyCollection<IAuthorizationPolicy> Authenticate(ReadOnlyCollection<IAuthorizationPolicy> authPolicy, Uri listenUri, ref Message message)
    {
        //throw new AuthenticationException("Credentials expired!");
        throw new SecurityException("my custom message:Invalid authentication");
        return base.Authenticate(authPolicy, listenUri,ref message);
    }
}

【问题讨论】:

  • 好吧,您可能不应该向可疑的客户详细说明身份验证失败的原因。一般不需要自定义错误

标签: c# wcf wcf-security


【解决方案1】:

身份验证/授权不提供自定义消息。 为什么您未获得授权或身份验证的任何指示都是攻击者破解您的安全或获取他无权获得的信息的一种方式。

例如说“您的密码错误”表示用户名存在。那很不好。未经授权的请求永远不应该得到这样的信息作为响应。

如果想查看问题所在,请写入服务器管理员可以访问的日志。但是不要向客户发送任何东西。永远。

所以总结一下:不,你不能得到一个自定义的消息,而且那个设计是故意的。

【讨论】:

  • WCF Rest 返回消息与 serviceauthenticationmanager 不同,因此我想给出自定义错误消息,顺便在 serviceauthenticationmanager 中抛出异常,中断消息的正确方法是什么?你有什么建议?跨度>
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-25
  • 2011-08-28
  • 2018-10-16
  • 2011-07-07
相关资源
最近更新 更多