此处的完整代码示例:https://github.com/crosbymichael/not-dockers-ui/commit/15d133324d22e84e3c2839d19b112a96ced4dd66
我用CSRF.Protect()包装了处理程序,Angular正在查找_gorilla_csrf
cookie并将其作为X-CSRF-Token
标头传回,但我总是收到非无效的令牌错误-GET请求:
Forbidden - CSRF token invalid
我是否尝试错误地使用gorilla / csrf?
编辑:我尝试做的简化示例:
var (
mux = http.NewServeMux()
fileHandler = http.FileServer(http.Dir(""))
h http.Handler
CSRF = csrf.Protect(
[]byte("32-byte-long-auth-key"),
csrf.HttpOnly(false),
csrf.Secure(false),
)
)
u, err := url.Parse("http://host/api")
if err != nil {
log.Fatal(err)
}
h = httputil.NewSingleHostReverseProxy(u)
mux.Handle("/dockerapi/", http.StripPrefix("/dockerapi", h))
mux.Handle("/", fileHandler)
handler := CSRF(mux)
if err := http.ListenAndServe(*addr, handler); err != nil {
log.Fatal(err)
}
我们直接从服务器提供静态文件,API请求传递到外部后端。该应用程序是一个Angular SPA,通常有多个飞行API请求,但通常只有一个非GET请求在任何时候都有效。