我正在实施一个用Go编写的app-engine webapp,需要用户身份验证和授权才能访问Google API上的某些用户数据。
我是否仍然需要使用goauth2和gorilla包来实现授权,或者“appengine”和“appengine / user”包中是否有一些功能可以为app-engine应用本地实现Oauthorization?我不介意继续使用goauth2,但如果有更好的方法......
答案 0 :(得分:2)
您可以使用“appengine / user”软件包进行OAuth身份验证,但我必须自己实施授权。 对于使用“appengine / user”包进行OAuth身份验证,请参阅https://developers.google.com/appengine/docs/go/oauth/#Go_OAuth_and_App_Engine
答案 1 :(得分:2)
以下是OAuth for Go Overview网站上Google App Engine Docs的示例:
import (
"fmt"
"net/http"
"appengine"
"appengine/user"
)
func welcome(w http.ResponseWriter, r *http.Request) {
c := appengine.NewContext(r)
u, err := user.CurrentOAuth(c, "")
if err != nil {
http.Error(w, "OAuth Authorization header required", http.StatusUnauthorized)
return
}
if !u.Admin {
http.Error(w, "Admin login only", http.StatusUnauthorized)
return
}
fmt.Fprintf(w, `Welcome, admin user %s!`, u)
}
看起来appengine/user
具有函数user.CurrentOAuth()
来提供身份验证功能。
对于授权,有一个使用OpenID Here的示例。
有一个警告;文档说明:
请注意,使用OAuth标识用户与标准用户身份验证模式完全正交。例如,如果用户仅通过OAuth进行身份验证,则使用login:required或login:admin标记的页面将拒绝加载。
Full Go GAE参考资料Here。