В настоящее время я пытаюсь разработать веб-приложение, которое синхронизирует календари из Office365, и до сих пор мне удалось получить пару токенов из системы Azure OAuth.
Но, хотя токен Refresh, по-видимому, имеет по крайней мере период действия 14 дней, кажется, что всякий раз, когда я пытаюсь обновить свой токен Access, я всегда получаю следующую ошибку:
OAuth error: "AADSTS70000: Authentication failed. Refresh Token is not valid.
Trace ID: 47836649-e160-40f0-93d1-f599caf4f665
Correlation ID: 45714317-5a29-4242-a785-be23269acf19
Timestamp: 2015-03-09 09:53:18Z"
Есть идеи ? Спасибо
— редактировать —
Вот запрос на обновление токена;
//parameters
refresh_token={refresh_token}
&grant_type=refresh_token
&client_id={client_id}
&client_secret={client_secret}
&resource=https%3A%2F%2Foutlook.office365.com
// url
https://login.windows.net/common/oauth2/token
— редактировать 2 —
Вот точный ответ JSON, который я получаю;
{
"error":"invalid_grant",
"error_description":"AADSTS70000: Authentication failed. Refresh Token is not valid.\r\nTrace ID: f0b5bc67-9ad5-4a75-b384-393486b31074\r\nCorrelation ID: 05af63f5-989a-4397-924f-58745c9bc964\r\nTimestamp: 2015-03-09 12:21:08Z","error_codes":[70000],
"timestamp":"2015-03-09 12:21:08Z",
"trace_id":"f0b5bc67-9ad5-4a75-b384-393486b31074",
"correlation_id":"05af63f5-989a-4397-924f-58745c9bc964",
"submit_url":null,
"context":null
}
Как указано в http://blogs.msdn.com/b/exchangedev/archive/2014/03/25/using-oauth2-to-access-calendar-contact-and-mail-api-in-exchange-online-in-office- 365.aspx, это означает, что мой токен обновления устарел … Но я просто сгенерировал его с помощью механизма полной авторизации, вот чего я не могу понять!
Я думаю, что нашел решение своей проблемы. Токены Azure действительно огромны (около 630 символов для токена обновления), и, поскольку мы храним токен обновления в varchar (255), он усекается, поэтому недопустим …
Когда вы попытаетесь получить токен доступа в первый раз, вы будете использовать URL, который будет возвращать ответ. В ответ вы получите токен обновления. Вы можете использовать его, чтобы снова получить токен доступа. Но если вы попробовали тот же URL-адрес, который использовался ранее, вы получите новый токен обновления. Вы больше не можете использовать первый токен обновления. Вы должны использовать новый токен обновления.
Я думаю, что вы используете предыдущий токен обновления.
Посмотрите на эту ссылку:
http://blogs.msdn.com/b/exchangedev/archive/2014/03/25/using-oauth2-to-access-calendar-contact-and-mail-api-in-exchange-online-in-office- 365.aspx
Просто предположение, но у вас есть «?» в начале ваших параметров. Вы передаете их как часть URL? Потому что они должны быть опубликованы как данные формы в теле запроса, а не как параметры запроса URL.