获取服务堆栈

时间:2017-08-01 16:52:58

标签: c# .net wcf servicestack

我有以下情景,

移动客户端--->服务堆栈api(A)---> A Wcf服务(B)

我从移动客户端发送访问令牌作为Http Authorization标头到服务堆栈api(B)我不需要在Auth提供程序中使用服务堆栈构建,因为我的服务栈api(A)只是一个中间的api WCF服务(B)。

我将授权标头作为HttpRequestMessageProperty发送到WCF服务(B)。我正在处理wcf服务端(B)中的其余验证。

  1. 如何获取移动客户端发送的“访问令牌” 在服务堆栈侧(A),只是传递给其他服务(B)我 找不到合适的文件。

  2. 如果我从服务(B)获得安全异常,我该如何有效 在服务堆栈端管理它(A)。理想情况下,我希望检查 如果是我希望的安全例外,在一个地方的例外 将401返回给带有响应的移动客户端

  3. 管理令牌或凭据或其他方式的有效方法是什么 服务堆栈方面的用户相关内容?类似于会话

  4. 任何人都有任何想法?

1 个答案:

答案 0 :(得分:1)

访问任何HTTP请求信息的方法是使用IRequest接口,该接口随处可用,作为所有Request and Response FiltersFilter Attributes中的参数,来自base.Request服务和剃刀意见等中的财产

可以从HTTP请求标头集合访问授权HTTP请求标头,例如:

var auth = httpReq.Headers[HttpHeaders.Authorization];

如果您想要对所有请求进行一般性处理,您通常会使用Global Request Filter来验证是否发送了有效的授权标头并且它是有效的,否则返回HTTP错误响应,例如:

this.GlobalRequestFilters.Add((req, res, requestDto) => {
    var auth = req.Headers[HttpHeaders.Authorization];
    if (auth == null)
    {
        res.StatusCode = (int)HttpStatusCode.Unauthorized;
        res.EndRequest();
    }
    else if (!MyIsValid(auth))
    {
        res.StatusCode = (int)HttpStatusCode.Forbidden;
        res.EndRequest();
    }
});