禁用WEB API令牌调用的GET功能



我使用ASP开发了一个应用程序。Net web API 2。应用程序已经完成,并且处于对其进行安全审查的过程中,但是要求之一是必须禁用任何登录的GET请求。

我们正在通过POST调用令牌操作,但是安全团队发现您仍然可以使用GET发出相同的请求,并且需要删除。我知道令牌调用是内置于整个OWIN/OAUTH系统中的令牌调用,但是是否有可能将其配置为仅接受POST请求并阻止GET?

通过查看武士刀项目的源代码,我可以看到在Microsoft.Owin.Security.OAuth.OAuthAuthorizationServerHandler中他们有以下检查:

if (Options.TokenEndpointPath.HasValue && Options.TokenEndpointPath == Request.Path)
{
    matchRequestContext.MatchesTokenEndpoint();
}

正如您所看到的,没有对HTTP METHOD进行额外检查。因此,作为可能的解决方案之一,我可以建议您编写自己的中间件,它在身份验证之前执行,并检查HTTP METHOD:

public class OnlyPostTokenMiddleware : OwinMiddleware
{
    private readonly OAuthAuthorizationServerOptions opts;
    public OnlyPostTokenMiddleware(OwinMiddleware next, OAuthAuthorizationServerOptions opts) : base(next)
    {
        this.opts = opts;
    }
    public override Task Invoke(IOwinContext context)
    {
        if (opts.TokenEndpointPath.HasValue && opts.TokenEndpointPath == context.Request.Path && context.Request.Method == "POST")
        {
            return Next.Invoke(context);
        }
        context.Response.StatusCode = (int)HttpStatusCode.NotFound;
        context.Response.ReasonPhrase = "Not Found";
        return context.Response.WriteAsync("Not Found");
    }
}

那么在Startup.cs中你会有类似的内容:

var authOptions = new OAuthAuthorizationServerOptions
{
    TokenEndpointPath = new PathString("/token"),
    Provider = Resolver.GetService<OAuthProvider>(),
    AccessTokenExpireTimeSpan = TimeSpan.FromDays(1)
};
app.Use<OnlyPostTokenMiddleware>(authOptions);
app.UseOAuthAuthorizationServer(authOptions);

相关内容

  • 没有找到相关文章

最新更新