用户授权Google Calendar后,NodeJS服务将代码、AccessToken和RefreshToken保存到存储中。
tok, err := config.TokenSource(ctx, token).Token() // token is previous valid token
if err != nil {
log.Fatalf("Unable to retrieve token from web: %v", err)
}
我也尝试将代码交换为新的令牌,但没有帮助
400错误的请求响应:{“error”:“invalid_grant”,“error_description”:“auth代码格式错误”}
tok, err := config.Exchange(context.TODO(), in)
if err != nil {
log.Fatalf("Unable to retrieve token from web: %v", err)
}
尝试使用Calendar.NewService访问
srv, _ := calendar.NewService(ctx, option.WithTokenSource(config.TokenSource(ctx, tok)))
func GetGoogleCalendarEvents(token *oauth2.Token, userid string) *calendar.Events {
tok := &oauth2.Token{}
var config *oauth2.Config
ctx := context.Background()
b, err := ioutil.ReadFile("credentials.json")
if err != nil {
log.Fatalf("Unable to read client secret file: %v", err)
}
config, err = google.ConfigFromJSON(b, calendar.CalendarScope) //calendar.CalendarScope)
if err != nil {
log.Fatalf("Unable to parse client secret file to config: %v", err)
}
tok = token
if token.Expiry.Before(time.Now()) {
tokenSource := config.TokenSource(ctx, token) //oauth2.NoContext
newToken, err := tokenSource.Token()
if err != nil {
log.Fatalln(err)
}
if tok.AccessToken != newToken.AccessToken {
SetAuthCredToCache(userid, tok)
tok = newToken
fmt.Println(newToken)
}
}
fmt.Println(tok.Expiry, tok.Valid(), tok.Type(), tok.RefreshToken, tok.TokenType)
srv, _ := calendar.NewService(ctx, option.WithTokenSource(config.TokenSource(ctx, tok)))
t := time.Now().Format(time.RFC3339)
events, err := srv.Events.List("primary").ShowDeleted(true).
SingleEvents(true).TimeMin(t).OrderBy("startTime").Do()
if err != nil {
log.Fatalf("Unable to retrieve next ten of the user's events: %v", err)
}
return events
}
这是一个解组问题。
当从节点保存令牌时,它将过期时间序列化为“expiry_date”,而Go令牌的json表示仅为“expiry”。将对象的其余部分解压缩到oauth2.token对象并将过期时间添加到该对象解决了这个问题。
我对oauth2中的刷新令牌有点困惑。如它所说的访问令牌限制了黑客可以使用用户凭证的1小时的时间窗口,刷新令牌是万岁令牌,可以用来重新创建访问令牌。 我很困惑,如果有人从cookie中窃取了访问令牌,他也可以窃取刷新令牌,并可以使用刷新令牌创建新的访问令牌,因为我在JQuery中有ajax请求(客户端)
我用JHipster 5.1.0生成了一个UAA服务器。我选择PostgreSQL作为数据库类型。 它连接到我的jhipster注册表,然后我生成了一个微服务和一个网关,如下所示: 启动网关进行用户登录后,它无法获取访问令牌并引发错误: 2018-07-23 17:32:53.378调试7228---[XNIO-2 task-10]c.c.c.a.g.a.AccessControlFilter:访
目前访问类型处于联机状态。当我需要访问驱动器上的文件/文件夹时,我将浏览器重定向到Google URL并获得访问代码: 一切运转良好!但我只需要第一次重定向。 当我谷歌时,在google Drive API文档中,我发现我可以通过浏览器重定向获得刷新令牌,并将其保存在数据库中。(换句话说,我可以使用脱机访问)。 而且每次当我需要从google drive读取数据时,我使用刷新令牌获得访问令牌,而无
我使用python google api客户机库来处理它使用google的Platform.js库从前端获得的的。 在这一点上,我所拥有的只是一个承载令牌。如何将其转换为凭据以便访问驱动器API?
我正在尝试从应用程序服务中获取Google的刷新令牌,但我不能。 日志说 2016-11-04T00:04:25 PID[500]收到的详细请求:获取https://noteappsvr.azurewebsites.net/.auth/login/google?access _ type = offline 2016-11-04t 00:04:25 PID[500]从https://account