duanjinchi1982 2013-08-13 16:17
浏览 58
已采纳

在golang中存储Oauth2凭据

I am trying to figure out how I can storing OAuth2 credentials in golang?

Currently I do this in Python:

from oauth2client.file import Storage ... storage = Storage('settings.dat')

Is there anything similar in go? Does anyone have an example? Thanks!

  • 写回答

1条回答 默认 最新

  • douyi1197 2013-08-13 16:51
    关注

    I think you want a CacheFile which you pass as the TokenCache. Here is some code ripped from a project which uses google drive with oauth2 which should hopefully get you started!

    import "code.google.com/p/goauth2/oauth"
    
    // Ask the user for a new auth
    func MakeNewToken(t *oauth.Transport) error {
        if *driveAuthCode == "" {
            // Generate a URL to visit for authorization.
            authUrl := t.Config.AuthCodeURL("state")
            fmt.Fprintf(os.Stderr, "Go to the following link in your browser
    ")
            fmt.Fprintf(os.Stderr, "%s
    ", authUrl)
            fmt.Fprintf(os.Stderr, "Log in, then re-run this program with the -drive-auth-code parameter
    ")
            fmt.Fprintf(os.Stderr, "You only need this parameter once until the drive token file has been created
    ")
            return errors.New("Re-run with --drive-auth-code")
        }
    
        // Read the code, and exchange it for a token.
        //fmt.Printf("Enter verification code: ")
        //var code string
        //fmt.Scanln(&code)
        _, err := t.Exchange(*driveAuthCode)
        return err
    }
    
    func main() {
        // Settings for authorization.
        var driveConfig = &oauth.Config{
            ClientId:     *driveClientId,
            ClientSecret: *driveClientSecret,
            Scope:        "https://www.googleapis.com/auth/drive",
            RedirectURL:  "urn:ietf:wg:oauth:2.0:oob",
            AuthURL:      "https://accounts.google.com/o/oauth2/auth",
            TokenURL:     "https://accounts.google.com/o/oauth2/token",
            TokenCache:   oauth.CacheFile(*driveTokenFile),
        }
    
        t := &oauth.Transport{
            Config:    driveConfig,
            Transport: http.DefaultTransport,
        }
    
        // Try to pull the token from the cache; if this fails, we need to get one.
        token, err := driveConfig.TokenCache.Token()
        if err != nil {
            err := MakeNewToken(t)
            if err != nil {
                return nil, fmt.Errorf("Failed to authorise: %s", err)
            }
         }
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 2020长安杯与连接网探
  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么
  • ¥15 banner广告展示设置多少时间不怎么会消耗用户价值
  • ¥16 mybatis的代理对象无法通过@Autowired装填
  • ¥15 可见光定位matlab仿真
  • ¥15 arduino 四自由度机械臂
  • ¥15 wordpress 产品图片 GIF 没法显示
  • ¥15 求三国群英传pl国战时间的修改方法
  • ¥15 matlab代码代写,需写出详细代码,代价私
  • ¥15 ROS系统搭建请教(跨境电商用途)