Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在HTTP头中使用令牌保护WCF RESTful_C#_Wcf_Rest_Authentication - Fatal编程技术网

C# 在HTTP头中使用令牌保护WCF RESTful

C# 在HTTP头中使用令牌保护WCF RESTful,c#,wcf,rest,authentication,C#,Wcf,Rest,Authentication,我正在创建一个WCF RESTful服务,该服务将通过在HTTP头中传递外部获得的身份验证令牌来保护。总之,顺序与此非常相似: 客户端:从identity server获取身份验证令牌 客户端:构造REST调用,在自定义HTTP中放置身份验证令牌 标题 客户端:执行get Rest服务器:验证身份验证令牌是否存在 Rest服务器:查询标识服务器以验证令牌和 获取用户上下文 Rest服务器:授权用户Rest服务器: 执行维修行动 所以,我的问题是,在WCF/.NET中进行此操作的最佳方式是什么?我

我正在创建一个WCF RESTful服务,该服务将通过在HTTP头中传递外部获得的身份验证令牌来保护。总之,顺序与此非常相似:

  • 客户端:从identity server获取身份验证令牌
  • 客户端:构造REST调用,在自定义HTTP中放置身份验证令牌 标题
  • 客户端:执行get
  • Rest服务器:验证身份验证令牌是否存在
  • Rest服务器:查询标识服务器以验证令牌和 获取用户上下文
  • Rest服务器:授权用户Rest服务器: 执行维修行动
  • 所以,我的问题是,在WCF/.NET中进行此操作的最佳方式是什么?我当然可以在我的REST方法中手工制作身份验证/授权检查,即

    public void DoSomething(string input)
    {
        if (Authed())
        {
            ...Do DoSomething...
        }
        else
        {
            throw new FaultException<MyFault>(new MyFault("Not today, thanks"));
        }
    }
    
    public bool Authed()
    {
        string rawUserAuthToken = WebOperationContext.Current.IncomingRequest.Headers["MyCustomHttpHeader"];
    
        ...Do the magic needed to verify and Authorise the incoming token...
    
        return result;
    }
    
    public void DoSomething(字符串输入)
    {
    if(Authed())
    {
    …做点什么。。。
    }
    其他的
    {
    抛出newfaultexception(newmyfault(“今天不行,谢谢”);
    }
    }
    公共bool Authed()
    {
    字符串rawUserAuthToken=WebOperationContext.Current.IncomingRequest.Headers[“MyCustomHttpHeader”];
    …执行验证和授权传入令牌所需的魔法。。。
    返回结果;
    }
    
    然而,我相信在WCF中有更优雅的方法来实现这一点。在做了一点谷歌搜索后,我遇到了SecurityTokenAuthenticator,但它似乎不符合我的需要

    那么,有什么建议吗

    编辑:这里的一个关键因素是解决方案必须是跨系统/语言中立的,客户机将基于几乎所有可以想象的技术堆栈,因此他们不能“仅仅添加一个服务引用”


    谢谢

    您是否正在寻找一种方法,允许您在服务器上检查令牌,而无需在每个方法中写入
    if(Authed())
    ?@YohDeadfall本质上是的,我希望用户在调用DoSomething()之前获得授权。我可能希望对不同的部署强制执行不同的安全模型/要求,将其置于功能方法之外会更容易。您可以使用
    IClientMessageInspector
    执行身份验证,并使用
    IDispatchMessageInspector
    验证令牌。或者使用
    IParameterInspector
    对所有操作执行相同的操作。如果你愿意,我可以写一个例子。