servicestack,C#,.net,Wcf,servicestack" /> servicestack,C#,.net,Wcf,servicestack" />

C# 获取服务堆栈中授权承载的值

C# 获取服务堆栈中授权承载的值,c#,.net,wcf,servicestack,C#,.net,Wcf,servicestack,我有下面的场景 移动客户端-->服务堆栈api(A)--->Wcf服务(B) 我将访问令牌作为Http授权头从移动客户端发送到服务堆栈api(B),因为我的服务堆栈api(A)只是WCF服务(B)的中间api,所以我不需要在身份验证提供程序中使用服务堆栈构建 我正在将授权标头作为HttpRequestMessageProperty发送到WCF服务(B)。我在wcf服务端(B)处理其余的验证 如何获取移动客户端发送的“访问令牌” 在服务堆栈侧(A),只需传递到其他服务(B)I 找不到有关此的正确文

我有下面的场景

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

我将访问令牌作为Http授权头从移动客户端发送到服务堆栈api(B),因为我的服务堆栈api(A)只是WCF服务(B)的中间api,所以我不需要在身份验证提供程序中使用服务堆栈构建

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

  • 如何获取移动客户端发送的“访问令牌” 在服务堆栈侧(A),只需传递到其他服务(B)I 找不到有关此的正确文档

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

  • 管理令牌、凭据或其他信息的有效方法是什么 服务栈端与用户相关的事情?比如会话 ?


  • 任何人都知道吗?

    访问任何HTTP请求信息的方法是使用
    IRequest
    接口,该接口在任何地方都可用,作为all和中的参数,来自服务和Razor视图中的
    base.Request
    属性等

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

    var auth = httpReq.Headers[HttpHeaders.Authorization];
    
    如果您想对所有请求进行一般性处理,您通常会使用一个可用于验证是否发送了有效的授权标头,以及该标头是否有效,否则将返回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();
        }
    });
    
    谢谢:)我和客户服务公司做了一些事情。我在“OnBeforeExecute”中使用了上面的代码片段。在“HandleException”中也使用了异常。