本文主要记录 Android app 第三方(google和meta/facebook)登入的后端(go)验证。

android sdk 接入流程

可参考 https://juejin.cn/post/7094889100389384228

google

官网链接: (https://developers.google.com/identity/sign-in/web/backend-auth) 官网推荐两中验证方式 :

  1. 使用谷歌API客户端库,包括Java、Node.js、PHP、Python,是在生产环境中验证谷歌ID令牌的推荐方法。go客户端库:https://github.com/googleapis/google-api-go-client)
  2. 调用谷歌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

官网链接:

  1. Android版本Facebook快速入门:https://developers.facebook.com/docs/facebook-login/android
  2. 后端验证 : (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
	}
}

参考