从今天早上开始,我尝试从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>();
如果有人有主意... 感谢您的回答。
答案 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”
现在可以了。