本文主要记录 Android app 第三方(google和meta/facebook)登入的后端(go)验证。
android sdk 接入流程
可参考 https://juejin.cn/post/7094889100389384228
官网链接: (https://developers.google.com/identity/sign-in/web/backend-auth) 官网推荐两中验证方式 :
- 使用谷歌API客户端库,包括Java、Node.js、PHP、Python,是在生产环境中验证谷歌ID令牌的推荐方法。go客户端库:https://github.com/googleapis/google-api-go-client)
- 调用谷歌API(https://oauth2.googleapis.com/tokeninfo?id_token=XYZ123)
这里采用第一种,参考代码:
package main
import (
"context"
"fmt"
"google.golang.org/api/oauth2/v2"
"google.golang.org/api/option"
"net/http"
)
func main() {
// 从客户端获取的谷歌token
googleToken := `user token from client`
oatuService, err := oauth2.NewService(context.Background(), option.WithHTTPClient(http.DefaultClient))
if err != nil {
fmt.Println(err)
}
tokenInfoCall := oatuService.Tokeninfo()
tokenInfoCall.IdToken(googleToken)
tokenInfo, err := tokenInfoCall.Do()
if err != nil {
fmt.Println(err)
}
fmt.Println(tokenInfo)
fmt.Printf("%v", tokenInfo)
//可以拿客户端发送的id,和 tokenInfo.Id 做校验
}
meta(facebook) 登入
meta 的验证和 google 类型,调用验证api
官网链接:
- Android版本Facebook快速入门:https://developers.facebook.com/docs/facebook-login/android
- 后端验证 : (https://developers.facebook.com/docs/facebook-login/guides/%20access-tokens/get-session-info)
请求格式:
GET /debug_token?
input_token={session-info-token}&
access_token={your-access-token}
go-api : https://developers.facebook.com/docs/facebook-login/guides/%20access-tokens/get-session-info
package main
import (
"fmt"
"net/http"
fb "github.com/huandu/facebook/v2"
)
func main() {
//客户端传递过来的 token
inputToken := "token from client"
globalApp := fb.New("developer-app-client-id", "develop-app-client-secret")
//生成 access_token
token := globalApp.AppAccessToken()
session := globalApp.Session(token)
resp, err := session.Get("debug_token", fb.Params{
"input_token": inputToken,
})
if err != nil {
return
}
}