2016-06-28 4 views
0

Я пытаюсь схватиться с OneDrive, с помощью этого учебника:Доступ OneDrive из Desktop App

https://msdn.microsoft.com/en-us/library/hh826529.aspx

Когда я запускаю в коде, он получает, насколько функции makeAccessTokenRequest, посылая следующие requestURL:

«https: //login.live.com/oauth20_token.srf?client_id=[myclientID] & client_secret = [myclientsecret] & redirect_uri = https: // login.live.com/oauth20_desktop.srf & grant_type = authorization_code & код = [AuthCode]»

(пожалуйста, игнорировать пробелы после "https:" Я должен был добавить их здесь, чтобы разрешить вопрос)

[myclientid], [myclientsecret] и [AuthCode] все появляются для правильного заполнения. Кажется, что он получил ответ, поскольку он запускает функцию «accessToken_DownloadStringCompleted», но генерирует ошибку «TargetInvocationException». Внутреннее сообщение об ошибке «Удаленный сервер возвратил ошибку: (400)« Плохой запрос ».

Может кто-нибудь пролить свет на это? Я новичок в этом, так извинения, если мой вопрос не имеет смысла, или раздражающе расплывчатый ..

ответ

0

Запросы к конечной точке oauth20_token.srf должны быть POST с параметрами в тексте сообщения вместо строки запроса. Поскольку вы не указали, какой код вы используете для создания HTTP-запроса, вам трудно представить пример, но посмотрите на RedeemAuthorizationCodeAsync в моем примере OAuth 2 для идеи.

Исходящий запрос должен выглядеть следующим образом:

POST https://login.live.com/oauth20_token.srf 
Content-Type: application/x-www-form-urlencoded 

client_id={client_id}&redirect_uri={redirect_uri}&client_secret={client_secret}&code={code}&grant_type=authorization_code 

Вы также можете найти этот учебник легче следовать, чем тот, который вы связаны с: https://dev.onedrive.com/auth/msa_oauth.htm.

Если вы делаете что-то с OneDrive (вы отметили сообщение OneDrive), тогда вы можете захотеть вместо этого использовать OneDrive SDK. Он включает проверку подлинности для нескольких типов .NET-проектов, поэтому вам не нужно определять, как выполнять авторизацию самостоятельно.

+0

Большое спасибо за вашу помощь, я очень ценю это. Я попробовал снова использовать вашу библиотеку, все работает нормально, пока не запустится: LoginAuthorizationCodeFlowAsync() Он вызывает RedeemAuthorizationCodeAsync(), который, похоже, создает запрос с правильными клиентскими, clientecret и auth-кодом. Но он возвращает null в «токены». Может ли это быть связано с тем, как приложение зарегистрировано в OneDrive? Он не перечисляет платформу на странице приложения, но всякий раз, когда я пытаюсь добавить «веб-платформу», она просто сохраняет без какой-либо платформы снова. Еще раз спасибо за вашу помощь. – Fritz

Смежные вопросы