golang google authenticator totp代码

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了golang google authenticator totp代码相关的知识,希望对你有一定的参考价值。

func genTOTP(secret string) string {
	key := make([]byte, base32.StdEncoding.DecodedLen(len(secret)))
	base32.StdEncoding.Decode(key, []byte(secret))
	message := make([]byte, 8)
	binary.BigEndian.PutUint64(message, uint64(time.Now().Unix()/30))
	hmacsha1 := hmac.New(sha1.New, key)
	hmacsha1.Write(message)
	hash := hmacsha1.Sum([]byte{})
	offset := hash[len(hash)-1] & 0xF
	truncatedHash := hash[offset : offset+4]
	return fmt.Sprintf("%06d", (binary.BigEndian.Uint32(truncatedHash)&0x7FFFFFFF)%1000000)
}

用于检索 google+ 域配置文件的 Golang 程序返回 403 Forbidden

【中文标题】用于检索 google+ 域配置文件的 Golang 程序返回 403 Forbidden【英文标题】:Golang program for retrieving google+ Domain profile returns 403 Forbidden 【发布时间】:2015-11-23 21:10:12 【问题描述】:

你能帮我解决以下问题吗?

我只是在编写一个简单的代码来检索我的 google+ 域用户个人资料。 1. 我正在使用域名为 spaceandhow.com 的 google+ 域帐户

    我已提供https://developers.google.com/identity/protocols/OAuth2ServiceAccount#delegatingauthority中列出的所有权限

    帐户已启用 Google+ API 和 Google+ Domain Api。

这是我写的函数。

func (p *GoogleAUTH) sendGoogleAuthReq()

    fmt.Println("GoogleAUTH package: Enter sendGoogleAuthReq")


    data, err := ioutil.ReadFile("D:\\Cygwin\\home\\praprasa\\pragna2.json")
    if err != nil 
        fmt.Printf("ReadFile error: %s", err)
    


    conf, err := google.JWTConfigFromJSON(data, "https://www.googleapis.com/auth/plus.me")
    if err != nil 
        fmt.Println("json error")

    

    client := conf.Client(oauth2.NoContext)

    resp, err := client.Get("https://www.googleapis.com/plusDomains/v1/people/me")
    if err != nil 
        fmt.Printf("GoogleAUTH package: request execution failed: %s", err)
        return
    
    defer resp.Body.Close()

    fmt.Println("GoogleAUTH package: response Status:", resp.Status)
    fmt.Println("GoogleAUTH package: response Headers:", resp.Header)

    body, err := ioutil.ReadAll(resp.Body)
    if err != nil 
        fmt.Printf("GoogleAUTH package: cannot fetch token: %v", err)
        return
    

    fmt.Println("GoogleAUTH package: response Body:", string(body))

    fmt.Println("GoogleAUTH package: Exit sendGoogleAuthReq")   

这是我收到的错误消息

GoogleAUTH package: response Status: 403 Forbidden
GoogleAUTH package: response Headers: map[Vary:[Origin X-Origin] X-Frame-Options:[SAMEORIGIN] X-Xss-Protection:[1; mode=block] Cache-Control:[private, max-age=0] Server:[GSE] Date:[Sat, 29 Aug 2015 07:55:47 GMT] Content-Type:[application/json; charset=UTF-8] Expires:[Sat, 29 Aug 2015 07:55:47 GMT] X-Content-Type-Options:[nosniff] Alternate-Protocol:[443:quic,p=1] Alt-Svc:[quic=":443"; p="1"; ma=604800]]
GoogleAUTH package: response Body: 
 "error": 
  "errors": [
   
    "domain": "global",
    "reason": "forbidden",
    "message": "Forbidden"
   
  ],
  "code": 403,
  "message": "Forbidden"
 

【问题讨论】:

【参考方案1】:

由于 plus API 的令牌问题,将出现禁止错误。在您获得要验证的人的令牌后,您可以简单地编写如下代码来获取人员信息。

func (p *GoogleAUTH) sendGoogleAuthReq()
   baseUrl := "https://www.googleapis.com/plus/v1/people/me"
   authbear := "Bearer "
   authbear += <access_token>
   cli := &http.Client
   req, _ := http.NewRequest("GET", baseUrl, nil)
   req.Header.Set("Authorization", authbear)
   res, _ := cli.Do(req)
   bo, _ := ioutil.ReadAll(res.Body)
   fmt.Println(string(bo))

【讨论】:

以上是关于golang google authenticator totp代码的主要内容,如果未能解决你的问题,请参考以下文章

Gmail API - Oauth2/google:找不到凭据(Golang)

flutter firebase google登录以及如何从多个类访问

golang google authenticator totp代码

Google Road Api SnapToRoad golang

用于检索 google+ 域配置文件的 Golang 程序返回 403 Forbidden

GOLANG编写google authenticator双因子用户认证体系