Использование класса Toknheelper SharePoint 2013, когда нет httpcontext.Courent
-
10-12-2019 - |
Вопрос
SharePoint 2013 в Visual Studio имеют класс токелеров, который упрощает использование OAuth для подключения к ClientContext ClientContext SharePoint 2013. Я использую этот класс для удаленного подключения к SharePoint 2013 (на офисе 365).
Я могу использовать метод TokenHelper.getClientContextWithAuthOrisionCodeCodeWithAuthorizationCode, чтобы получить клиентконкультектую с помощью кода авторизации OAUTH при запуске в веб-приложении, который имеет httpcontext.Courent. Однако, если я использую этот же код в приложении консоли или другое контекст, где нет httpcontext.Courent, удаленный сервер SharePoint 2013 возвращает (400) плохой запрос.
Я сузил проблему до Microsoft.odyteityModel.s2s.protocols.oauth2.oauth2s2sclient.issue (). Когда есть httpContext, он работает, но без него ошибка (400) ошибка запроса.
Я попробовал использовать Framework MOQ, чтобы подделать httpContext, но это тоже не работает.
Сбой происходит в методе TokenHelper. GetCCessToken здесь:
OAuth2S2SClient client = new OAuth2S2SClient();
OAuth2AccessTokenResponse oauth2Response;
try
{
oauth2Response =
client.Issue(AcsMetadataParser.GetStsUrl(realm), oauth2Request) as OAuth2AccessTokenResponse;
}
.
Любые идеи?
Решение
Я наконец мог выяснить, что я делал не так:
1) Код авторизации, возвращаемый при создании соединения OAUTH, предназначен только для этого сеанса браузера.Таким образом, почему я не мог повторно использовать этот код авторизации позже в задних командах или в новых сессиях браузера.
2) На странице перенаправления я использовал код авторизации, возвращаемый для создания нового токена доступа.От токена доступа я мог бы получить токен обновления.
3) Токен обновления - это то, что я могу хранить и повторно использовать, чтобы создать контексты клиента из заднего кода или новых сеансов браузера.
Так, в двух словах, чтобы повторно использовать токен OAuth, вы должны использовать токен обновления, а не код авторизации.