Когда пользователь сначала аутентифицирует ваше приложение, вам предоставляется авторизационный код. Затем вам необходимо взять этот код авторизации и обменять его на токен доступа и токен обновления. После использования авторизационного кода его нельзя использовать снова.
grant_type = authorization_code
Обозначает, что вы просите Google, чтобы verifiy, что ваш код авторизации и дать вам новый маркер доступа и обновления маркера.
Мне кажется, что вы берете либо токен доступа, возвращенный из этого запроса, и отправляете его в конечную точку grant_type = authorization_code, которая не будет работать с неправильным типом кода. Куры ошибка вы получаете из
400 Bad Request { "ошибка": "invalid_grant", "error_description": "Некорректного маркера типа." }
Вам нужно будет взять токен обновления, который вы даете. Если есть один, я не уверен, что вы даже можете получить токен обновления от AngularJs. Вы можете получить один, используя java.
обновлённый маркера доступа в чистом отдыхе будет выглядеть следующим образом
https://accounts.google.com/o/oauth2/token
client_id={ClientId}.apps.googleusercontent.com&client_secret={ClientSecret}&refresh_token=1/ffYmfI0sjR54Ft9oupubLzrJhD1hZS5tWQcyAvNECCA&grant_type=refresh_token
Обратите внимание на &grant_type=refresh_token
. Если вы используете клиентскую библиотеку Google api java, она должна обрабатывать все это для вас. Однако ваши теги немного запутывают его непонятное, если вы пытаетесь сделать это в java или angularjs, которые, как я считаю, позволят вам использовать токены обновления. Опять я не угловатый dev, я мог ошибаться по этому поводу.
Anwser:
вам код, который вы отправляете не код авторизации. Только код авторизации может быть отправлен в grant_type = authorization_code.Решение: Отправить письмо authorization_code
Типы кодов Google и лексем:
Есть три типа кодов или маркеров вы должны быть в курсе с oauth2.
- Код авторизации.
- Обновить маркер
- маркера доступа
При запросе доступа пользователя, и они предоставляют вам доступ приложения вам предоставляется Authorization code
. Код авторизации недолговечен, вероятно, менее 10 минут, и его можно использовать только один раз.
Код авторизации используется для получения маркера первичного доступа и токена обновления с сервера аутентификации googles. используя grant_type=authorization_code
Токен доступа хорош около часа. Они используются для звонков на Google API,
https://www.googleapis.com/plus/v1/people/me?access_token={your access token}
Вы можете использовать маркер доступа, как часто, как вы хотите в течение этого часа если вы не сдуть некоторую квоту.
Обновить токены используются для запроса нового токена доступа с сервера проверки подлинности Google, когда токен доступа, который у вас есть, истек или вы просто хотите новый. здесь grant_type=refresh_token
используется для запроса нового токена доступа, который вы по существу говорите в Google. Я посылаю вам токен обновления, который вы знаете, что делать.
дополнительное чтение
У меня есть купе учебники, которые могут помочь вам Google 3 Legged OAuth2 Flow и Google Developer Console Oauth2 credentials
Также полезно при изучении OAuth: The OAuth 2.0 Authorization Framework
Почему вы не используете обновления маркер на клиентская сторона? –
Я читал API, и он сказал, что токен обновления не работает на стороне клиента. Так что он не потратил много времени на изучение этого. Можно ли использовать его на стороне клиента? Не могли бы вы сообщить мне шаги? –