将响应和请求记录到OAuth提供程序

时间:2014-04-15 15:23:00

标签: asp.net-web-api oauth-2.0 owin

有没有办法捕获OAuth提供的请求的响应?具体来说,我需要记录来自OAuthAuthorizationServerProvider.GrantResourceOwnerCredentials()的请求和响应。

我已尝试延长OwinMiddleware并覆盖Invoke,如this post所示,但我无法阅读回复正文。我想在this post演示时使用消息处理程序,但我的UseHttpMessageHandler对象上没有AppBuilder

非常感谢任何帮助。 谢谢!

更新

修改Brock优秀video中提供的示例,这是我需要做的:

public class Startup
{
    public void Configuration(IAppBuilder app)
    {
        app.Use(typeof(MW1));

        app.Map("/api", fooApp => {
            fooApp.Use<MW2>();
        });
    }
}

public class MW1 {
    Func<IDictionary<string, object>, Task> next;
    public MW1(Func<IDictionary<string, object>, Task> next) {
        this.next = next;
    }

    public async Task Invoke(IDictionary<string, object> env) {
        var ctx = new OwinContext(env);
        await next(env);
        // I need to be able to read: <h1>MW2 called</h1> written by MW2
        var body = ctx.Response.Body;
        // body.CanRead = False
    }
}

public class MW2 {
    Func<IDictionary<string, object>, Task> next;
    public MW2(Func<IDictionary<string, object>, Task> next) {
        this.next = next;
    }

    public async Task Invoke(IDictionary<string, object> env) {
        var ctx = new OwinContext(env);
        await ctx.Response.WriteAsync("<h1>MW2 called</h1>");
        await next(env);
    }
}

我实际上需要阅读OAuth提供商发送的响应,但我认为这将是相同的过程。

1 个答案:

答案 0 :(得分:0)

为什么不实现位于OAuth AS中间件前面的OWIN中间件组件?