Google calendar api 如何从Google登录获取刷新令牌?

Google calendar api 如何从Google登录获取刷新令牌?,google-calendar-api,google-signin,google-api-dotnet-client,Google Calendar Api,Google Signin,Google Api Dotnet Client,我创建了一个原型,向用户请求使用ASP.NETWebForms访问谷歌日历的权限 这是我的密码: <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="GoogleSignInDemo.WebForm1" %> <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <h

我创建了一个原型,向用户请求使用ASP.NETWebForms访问谷歌日历的权限

这是我的密码:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="GoogleSignInDemo.WebForm1" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
    <meta name="google-signin-scope" content="profile email">
    <meta name="google-signin-client_id" content="CLIENT_ID.apps.googleusercontent.com">
    <script src="https://apis.google.com/js/platform.js" async defer></script>
    <script src="Resources/jquery.js" ></script>
</head>
<body>
    <div class="g-signin2" data-theme="dark" onclick="onSignInCalendar()"></div>
    <script>
        function onSignInCalendar() {
            var auth2 = gapi.auth2.getAuthInstance();
            var options = new gapi.auth2.SigninOptionsBuilder(
                { 'scope': 'email https://www.googleapis.com/auth/calendar' });

            googleUser = auth2.currentUser.get();
            googleUser.grant(options).then(
                function (success) {
                    console.log(JSON.stringify({ message: "success", value: success }));
                    var accessToken = success.Zi.access_token;
                    var idToken = success.Zi.id_token;
                },
                function (fail) {
                    alert(JSON.stringify({ message: "fail", value: fail }));
                });
        }
    </script>
</body>
</html>

函数onSigningCalendar(){
var auth2=gapi.auth2.getAuthInstance();
var options=new gapi.auth2.SigninOptionsBuilder(
{'scope':'emailhttps://www.googleapis.com/auth/calendar' });
googleUser=auth2.currentUser.get();
googleUser.grant(选项),然后(
功能(成功){
log(JSON.stringify({message:“success”,value:success}));
var accessToken=success.Zi.access\u token;
var idToken=success.Zi.id\u token;
},
功能(失败){
警报(JSON.stringify({message:“fail”,value:fail}));
});
}
它很好用。但是,来自google的响应只包含
access\u-token
id\u-token
。我在那里找不到
refresh\u token


有人知道如何获取它吗?

可能的重复由于您正在使用客户端身份验证,此特定流不是为了使用刷新令牌而设计的。为什么你认为你需要一个呢?@ADyson主要的想法是将谷歌日历数据从用户同步到我的应用程序,他们只需要在开始时给予一次许可。我现在获得的
access\u令牌
有一个过期时间。我可以从另一个名为
“expires\u in:3600
的属性中看到这一点。因此,我假设我需要一个
refresh\u token
,以便在客户端流中获得一个新的
access\u token
,据我所知,您不需要代表用户请求它-这只是在您作为代理发出请求的情况下(即,来自服务器端应用程序,其中对谷歌的HTTP请求不是直接从用户浏览器发出的).据我所知和经验,如果访问令牌已过期,但用户仍在浏览器中登录到他们的google帐户,它将自己去获取一个新令牌,或者用户将得到一个快速提示屏幕,确认他们希望继续登录到应用程序。但是,正是如此,同步过程本身将完成om服务器端服务。只有在客户端完成的访问请求。因此,我想除了用户的电子邮件之外还需要
刷新\u令牌
。对此有何想法?