.net ad域登录 form认证_golang|给Gitbook做个认证代理
生活随笔
收集整理的這篇文章主要介紹了
.net ad域登录 form认证_golang|给Gitbook做个认证代理
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
后臺管理系統(tǒng)嵌入了Gitbook做幫助中心,需要給Gitbook添加下認證。
思路如下:修改Gitbook發(fā)布時的js,給每個URL拼接上用戶登錄后的Token,Gitbook前面有個代理獲取這個Token,Token驗證成功,則將請求發(fā)送給Gitbook server,否則返回403.
本打算用NGINX來實現(xiàn),但是發(fā)現(xiàn)會比較麻煩,不好處理,直接使用go實現(xiàn)下,簡單方便。
核心如下:
func Handler(w http.ResponseWriter, r *http.Request) {url, err := url.Parse(gitbook) // gitbook為后端Gitbook server地址if err != nil {log.Fatal(err)}proxy := httputil.NewSingleHostReverseProxy(url)proxy.ServeHTTP(w, r)}增加個攔截器:
func HTTPInterceptor(h http.HandlerFunc) http.HandlerFunc {return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {r.ParseForm()token := r.Form.Get("token")if token == "" || token != token {w.WriteHeader(http.StatusInternalServerError)fmt.Fprintln(w, "403 Forbidden")return}h(w, r)})}HTTPS的配置
http.ListenAndServeTLS(host, "server.pem", "server.key", nil)完整代碼如下:
package mainimport ("fmt""log""net/http""net/http/httputil""net/url")func init() {log.SetFlags(log.LstdFlags | log.Lshortfile)}// 配置文件var (host = ":8080"token = "a3du27" // 可以從Redis或MySQL中獲取然后驗證https = truegitbook = "127.0.0.1:7000")func HTTPInterceptor(h http.HandlerFunc) http.HandlerFunc {return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {r.ParseForm()token := r.Form.Get("token")if token == "" || token != token {w.WriteHeader(http.StatusInternalServerError)fmt.Fprintln(w, "403 Forbidden")return}h(w, r)})}func Handler(w http.ResponseWriter, r *http.Request) {url, err := url.Parse(gitbook)if err != nil {log.Fatal(err)}proxy := httputil.NewSingleHostReverseProxy(url)proxy.ServeHTTP(w, r)}func main() {http.HandleFunc("/", HTTPInterceptor(Handler))var err errorif https {err = http.ListenAndServeTLS(host, "server.pem", "server.key", nil)} else {err = http.ListenAndServe(host, nil)}if err != nil {log.Fatal(err)}}總結(jié)
以上是生活随笔為你收集整理的.net ad域登录 form认证_golang|给Gitbook做个认证代理的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 月季多少钱啊?
- 下一篇: cv岗工作做什么_职场速递:我应该做什么