当我尝试获取accessToken时Google返回错误500

时间:2018-11-21 16:22:38

标签: token access-token google-account http-status-code-500

从今天早上开始,我尝试从GoogleAPI获取我的accessToken,但它根本不起作用,我也不知道为什么。

我将发帖请求发送到以下地址:https://oauth2.googleapis.com/token(帐户服务生成的json文件中的地址,带有private_key,project_id等)

每次我得到这个http答案:{ "error": "internal_failure" }

我的标题jwt:

{
    "scope": "https://www.googleapis.com/auth/homegraph",
    "nbf": 1542816703,
    "exp": 1542820303,
    "iat": 1542816703,
    "iss": "myaccount@google.com",
    "aud": "https://oauth2.googleapis.com/token"
}

我的电话:

var jwtResult = ConstructJwt();
var paramaters = new Dictionary<string, string>();
paramaters.Add("grant_type", "urn:ietf:params:oauth:grant-type:jwt-bearer");
paramaters.Add("assertion", jwtResult);

var request = new HttpRequestMessage
{
    Method = HttpMethod.Post,
    RequestUri = new Uri(_serviceAccount.TokenUri),
    Content = new FormUrlEncodedContent(paramaters)
};

this._client.DefaultRequestHeaders.Accept.Clear();
this._client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/x-www-form-urlencoded"));

var response = await this._client.SendAsync(request);
var accessToken = await response.Content.ReadAsAsync<AccessTokenResponseModel>();

如果有人有主意... 感谢您的回答。

1 个答案:

答案 0 :(得分:1)

我找到了解决方案。 我必须将“孩子”参数放入accesstoken标头中。

var header = new JwtHeader(signingCredentials);
header.Add("kid", _serviceAccount.PrivateKeyId);

并从AccountService生成的json文件中更改“ token_uri”。 “ https://oauth2.googleapis.com/token” =>“ https://accounts.google.com/o/oauth2/token

现在可以了。