gpt4 book ai didi

golang 与 fastcgi 如何读取 REMOTE_USER

转载 作者:IT王子 更新时间:2023-10-29 01:33:25 31 4
gpt4 key购买 nike

简而言之:如何使用 fastcgi 在 golang 上读取 CGI var REMOTE_USER?

长:我正在尝试编写一个程序,以便在套接字上使用 fcgi 在 httpd 后面工作。 httpd 执行 ssl 终止并提供基本身份验证。我需要读取 $REMOTE_USER,但我不能在 golang 中读取,而我可以在 perl 中读取。

我的代码基于 this fcgi example .我试试

func homeView(w http.ResponseWriter, r *http.Request) {     
user, pass, authok := r.BasicAuth()

但是 authok 始终为 false,user 和 pass 仍然为空,尽管我确信授权(由 httpd 完成)是正确的。为了消除其他错误,我在 perl 中完成了:

my $socket = FCGI::OpenSocket("/run/fcgi-check.sock", 5);
my $q = FCGI::Request(\*STDIN, \*STDOUT, \*STDERR, \%ENV, $socket);

while ($q->Accept() >= 0) {
my $c = CGI::Simple->new;
my $user_id = $c->remote_user();

它在 perl 中运行良好。

为了调试,我打印了 r.Header 的输出,我得到了:

map[Authorization:[]

我是对的,go 看到的 header 没有包含任何授权信息吗?但它在 perl 中确实如此。

这是一个完整但最小的 golang 代码示例,它演示了这个问题(在 OpenBSD 5.8 上使用 go 版本 go1.4.2 openbsd/amd64 和 OpenBSDs httpd,在 httpd.conf 中使用 'authenticate "/"with restricted_users'。

package main

import (
"github.com/gorilla/mux"
"io"
"log"
"fmt"
"net"
"net/http"
"net/http/fcgi"
)


func homeView(w http.ResponseWriter, r *http.Request) {
headers := w.Header()
headers.Add("Content-Type", "text/html")
headers.Add("Cache-Control", "no-cache, no-store, must-revalidate")
headers.Add("Pragma", "no-cache")
headers.Add("Expires", "0")
r.ParseForm()

user, pass, authok := r.BasicAuth()

if authok {
io.WriteString(w, fmt.Sprintln("Auth OK"))
io.WriteString(w, fmt.Sprintln("user is: "+user+", pass is: "+pass))
} else {
io.WriteString(w, fmt.Sprintln("Auth NOT OK"))
}
}

func main() {

r := mux.NewRouter()
r.HandleFunc("/check/", homeView)

var err error
listener, err := net.Listen("unix", "/run/fcgi-check.sock")
if err != nil {
log.Fatal(err)
}
defer listener.Close()

err = fcgi.Serve(listener, r)
if err != nil { log.Fatal(err)}
}

帮助将不胜感激!

提前致谢!

最佳答案

Go 1.9 将公开 cgi 环境变量。如这张已关闭的票证所示:

https://go-review.googlesource.com/c/40012

关于golang 与 fastcgi 如何读取 REMOTE_USER,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34006957/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com