我正在从 CLI 应用程序设置 OAuth2 流,我正在处理。我需要为提供商创建一个临时HTTP服务器以发送回调,例如localhost:8080/callback
一旦提供商发送了我需要的详细信息,我希望能够关闭HTTP服务器,只是为了保持一切干净。我想我正在寻找的是例程和等待组,但我对这个领域仍然很陌生。
这就是我到目前为止所拥有的。我已经编辑了将用户发送到提供程序的部分,因为我的主要问题只是如何在捕获变量后关闭HTTP服务器。token
服务器启动
将用户定向到提供程序站点上的授权 URL
用户批准请求
提供程序将用户定向回localhost:8080/callback
URL仅包含客户端参数,因此我必须使用服务器HTML来捕获值并将其发送回服务器
服务器接收令牌,然后可以关闭
package main
import (
"fmt"
"log"
"net/http"
"sync"
)
func main() {
// Start local HTTP serevr to listen for response
serverDone := &sync.WaitGroup{}
serverDone.Add(1)
Start(serverDone)
// ... Process to start OAuth2 flow
// User is directed to provider website
// User approves
// Provider direct user back to localhost/callback
serverDone.Wait()
}
func Start(wg *sync.WaitGroup) {
srv := &http.Server{Addr: ":8080"}
http.HandleFunc("/callback", func(w http.ResponseWriter, r *http.Request) {
token := r.URL.Query().Get("token")
if token != "" {
fmt.Println("Found Token:", token)
// Shut down server here
} else {
// Server HTML page to fetch token and return to server at /callback
}
})
go func() {
// let main know we are done cleaning up
defer wg.Done()
// ErrServerClosed on graceful close
if err := srv.ListenAndServe(); err != http.ErrServerClosed {
log.Fatalf("ListenAndServe(): %v", err)
}
}()
}
慕妹3242003
相关分类