【问题标题】:GData OAuthUtil.GetAccessToken does not return a refresh_token valueGData OAuthUtil.GetAccessToken 不返回 refresh_token 值
【发布时间】:2012-08-18 03:10:28
【问题描述】:

当我使用Google.GData.Client .NET 库并尝试启动OAuth 会话时,它可以正常工作,直到会话到期。当我最初提出GetAccessToken 请求时,RefreshToken 的值似乎是null

Step1(默认.aspx):

OAuth2Parameters parameters = new OAuth2Parameters();
//<<build parameters with keys and CLIENT_IDs and such>>
string authorizationUrl = OAuthUtil.CreateOAuth2AuthorizationUrl(parameters);
Response.Redirect(authorizationUrl);

第二步(oauth.aspx):

Session["ACCESS_CODE"] = Request.QueryString["code"];
Response.Redirect("Results.aspx");

第三步 (results.aspx)

if (Session["ACCESS_CODE"] == null)
  Response.Redirect("Default.aspx");

parameters.AccessCode = Session["ACCESS_CODE"].To_String();
OAuthUtil.GetAccessToken(parameters);
Response.Write("OAuth Access Token: " + parameters.AccessToken);
Session["ACCESS_TOKEN"] = parameters.AccessToken;
Session["REFRESH_TOKEN"] = parameters.RefreshToken;

此时我检查代码时我的RefreshToken == null。因为这个我不能打电话

OAuthUtil.RefreshAccessToken(parameters); 

没有得到错误值不能是null

【问题讨论】:

    标签: .net oauth gdata


    【解决方案1】:

    使用 OAuth 2.0 离线流程,您只会在用户第一次交换授权码并授予对您应用的访问权限时收到刷新令牌。您应该将该刷新令牌存储在数据库中以备后用。

    如果您在任何时候需要用户的刷新令牌,但您的数据库中没有它,或者您拥有的令牌已损坏或被撤销,您必须将用户发送回授权页面,以便它可以再次授予访问权限并为您提供新的刷新令牌。

    Google Drive SDK documentation 彻底解释了这个过程。另外,还有a complete ASP.NET MVC application 可以作为参考。

    【讨论】:

    • 这就是我的想法,但是当我第一次获得 AuthToken 时,我似乎没有得到任何刷新代码。我应该在身份验证重定向时寻找它吗?
    • accounts.google.com/b/0/IssuedAuthSubTokens?hl=en撤消对您应用的访问权限并重试,您应该第一次获得刷新令牌
    • 这似乎做到了。我一直在清除我的数据库存储值,显然允许访问后的第一个响应返回了刷新令牌。现在我将它存储在数据库中并很好地哼唱。谢谢!
    • 如果指向 ASP.NET 项目的链接仍然有效?它似乎将我带到另一个页面,那里似乎没有 ASP.NET 示例?
    猜你喜欢
    • 2012-03-18
    • 1970-01-01
    • 2020-06-18
    • 2012-10-31
    • 2012-07-02
    • 2017-11-14
    • 2019-06-02
    • 2017-07-20
    • 1970-01-01
    相关资源
    最近更新 更多