我试图使用google oauth使用下面的链接,但得到一个405错误,
你能告诉我参数是否正确吗?
client_id = changed to a diff value
response_type = code
scope= openid%20email
redirecturl = given the value based on what I registered in console.developers.com
login_hint = my gmail id..
https://accounts.google.com/o/oauth2/token?
client_id=690178314820-85fvo4eq56se4mppdaf0pt6tnnjo552&
response_type=code&
scope=openid%20email&
redirect_uri=http://test.webfactional.com&
state=security_token%3D138r5719ru3e1%26url%3Dhttps://oa2cb.example.com/myHome&
login_hint=myemail@gmail.com
我在浏览器中做了上面的get请求…
有几个步骤可以访问谷歌,我更容易向您展示完整的流程。我猜你被困在第二步了,因为你没有把它作为帖子发送。
步骤1:请求访问
https://accounts.google.com/o/oauth2/auth?client_id={clientid}.apps.googleusercontent.com&redirect_uri={From console}&scope=openid%20email&response_type=code
这只是显示要求他们批准您的窗口。一旦用户批准访问,您将获得一次性认证码。
step2: Exchange Authentication Code
for AccessToken
and RefreshToken
。注意,这需要作为HTTP POST发送,而不是HTTP Get。
https://accounts.google.com/o/oauth2/token
code={Authentication Code from step 1}&client_id={ClientId}.apps.googleusercontent.com&client_secret={ClientSecret}&redirect_uri=={From console}&grant_type=authorization_code
你应该得到一个JSon字符串,看起来像这样。
{
"access_token" : "ya29.1.AADtN_VSBMC2Ga2lhxsTKjVQ_ROco8VbD6h01aj4PcKHLm6qvHbNtn-_BIzXMw",
"token_type" : "Bearer",
"expires_in" : 3600,
"refresh_token" : "1/J-3zPA8XR1o_cXebV9sDKn_f5MTqaFhKFxH-3PUPiJ4"
}
现在您可以使用Access_token
并使用它来提出您的请求。但是访问令牌只能有效1小时,然后它们在此之前过期,您需要使用Refresh_token
来获得新的访问令牌。另外,如果你想再次访问你的用户数据,你应该保存refresh_token
的某个地方,使您能够始终访问那里的数据。
步骤3:使用Refreshtoken
https://accounts.google.com/o/oauth2/token
client_id={ClientId}.apps.googleusercontent.com&client_secret={ClientSecret}&refresh_token={RefreshToken from step 2}&grant_type=refresh_token
这一次你只会得到访问令牌回来,因为你的刷新令牌是好的,直到用户删除身份验证或你没有使用它6个月。
{
"access_token" : "ya29.1.AADtN_XK16As2ZHlScqOxGtntIlevNcasMSPwGiE3pe5ANZfrmJTcsI3ZtAjv4sDrPDRnQ",
"token_type" : "Bearer",
"expires_in" : 3600
}
你可以在这里找到更多的详细信息谷歌3腿oauth2流程
看来你使用了错误的api,你应该使用https://accounts.google.com/o/oauth2/auth
而不是https://accounts.google.com/o/oauth2/token
。
您得到错误405的原因是https://accounts.google.com/o/oauth2/token
只能通过POST调用,它是为了获取令牌。您需要首先获得授权码,然后将其交换为令牌。
请注意/oauth2/v3/token和/oauth2/token
我遵循谷歌的指南在这个链接
显示如下
-
获取认证码由/o/oauth2/auth =>它工作,响应如指南
-
get access token by/oauth2/v3/token =>错误,响应状态码405
正确的必须是/oauth2/token