【问题标题】:What is Google expecting from a /token enpoint?Google 对 /token 端点有什么期望?
【发布时间】:2020-09-16 04:51:49
【问题描述】:

我正在开发一个 Google Actions 应用程序和一个 Webhook,以使该应用程序与具有客户端凭据的服务器通信。使用我的服务器实现 OAuth 和 Google 登录流程时,我似乎无法找到 Google 端从 /token 端点等待的响应,它应该返回访问令牌,然后将在每个请求中使用该令牌由动作制成(..如果我正确理解了那部分..)。我目前返回一个带有适当状态码(我认为)的 ContentResult 和一个带有它应该返回的访问令牌的 json 正文。像这样的:

ContentResult result = null;
data.Add(@"token_type", @"Bearer");
data.Add(@"access_token", FAKE_ACCESS_TOKEN);
data.Add(@"refresh_token", FAKE_REFRESH_TOKEN);
data.Add(@"expires_in", FAKE_SECONDS_TO_EXPIRATION);

jsonResponse = data.ToString();

result = new ContentResult
{
     Content = jsonResponse,
     ContentType = "application/json"
     StatusCode = (int?)HttpStatusCode.OK
};

return result;

这部分的Documentation 似乎含糊不清。也许有人可以帮我弄清楚吗?提前致谢

【问题讨论】:

  • 这看起来不错。尝试bearer 而不是BearerBearer 在标头中发送令牌时应该是,但如果我没记错的话,OAuth2 身份提供者应该返回bearer

标签: c# oauth-2.0 google-oauth actions-on-google


【解决方案1】:

假设您使用的是代码流,那么您的 /token 端点有两件事需要处理:

  • 访问令牌刷新令牌交换授权码
  • 刷新令牌换取新的访问令牌

每个的响应都相似,但略有不同(最值得注意的是,第二个不应返回新的刷新令牌)。

对于 auth code 交换,发送给您的参数 grant_type 将具有“authorization_code”值,因此您将返回类似于以下内容的 JSON:

{
"token_type": "Bearer",
"access_token": "ACCESS_TOKEN",
"refresh_token": "REFRESH_TOKEN",
"expires_in": SECONDS_TO_EXPIRATION
}

对于 刷新令牌 交换,grant_type 参数的值为“refresh_token”,响应大致相同,但没有刷新令牌:

{
"token_type": "Bearer",
"access_token": "ACCESS_TOKEN",
"expires_in": SECONDS_TO_EXPIRATION
}

【讨论】:

    【解决方案2】:

    [已解决] 感谢您的回答。我通过将 Post Method 的返回类型更改为“JsonResult”而不是“ContentResult”来解决问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-11-26
      • 2020-10-08
      • 1970-01-01
      • 2012-09-03
      • 2012-08-24
      • 1970-01-01
      • 2012-04-29
      相关资源
      最近更新 更多