Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.55/29: Рейтинг темы: голосов - 29, средняя оценка - 4.55
 Аватар для Kloshar
56 / 43 / 27
Регистрация: 19.12.2013
Сообщений: 204

Авторизация в Яндексе

13.09.2021, 17:58. Показов 7846. Ответов 8
Метки c# (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет!
У меня есть приложение, которое отправляет файлы с компьютера через почту.
Сейчас модно авторизоваться через OAuth. Для гугл почты это делается через api и есть примеры. А вот яндекса никак не разберусь как получить токен.
Может есть у кого готовый пример? Интересует именно настольное приложение для компьютера (не мобильное или web).
На сайте https://yandex.ru/dev/oauth/do... lient.html я приложение зарегистрировал.
Код программы примерно такой:
C#
1
2
3
4
string request = "https://oauth.yandex.ru/authorize?" + "response_type=code" + "&client_id=xxx";
HttpClient req = new HttpClient();
Task<HttpResponseMessage> content = req.GetAsync(request);
onsole.WriteLine(content.Result);
Если добавить:
C#
1
browser.Navigate(request);
То в окне браузера вижу:
403 При регистрации приложения не был указан Callback URL, приложение не может получить доступ через веб-интерфейс
Подскажите куда копать?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
13.09.2021, 17:58
Ответы с готовыми решениями:

Авторизация на яндексе с последующим редиректом
Доброго времени суток, возникла проблема, авторизуюсь на яндексе - успешно, но при последующем редиректе на страницу money.yandex.ru...

Авторизация на Яндексе: cookies не передаются от функции к функции
Делаю программу, эмитирующую работу в яндексе, по сути парсер. За основу взял исходник парсера на rabota.mail.ru. Там все работает,a на...

Авторизация на яндексе
Есть 2 едита,в первом надо ввести свой логин от ящика во второе поле надо ввести пароль!как это сделать?

8
1152 / 860 / 263
Регистрация: 30.04.2009
Сообщений: 3,603
13.09.2021, 19:05
Цитата Сообщение от Kloshar Посмотреть сообщение
При регистрации приложения не был указан Callback URL, приложение не может получить доступ через веб-интерфейс
Подскажите куда копать?
Вам сам яндекс говорит куда копать...
0
 Аватар для Kloshar
56 / 43 / 27
Регистрация: 19.12.2013
Сообщений: 204
14.09.2021, 08:58  [ТС]
Цитата Сообщение от nicolas2008 Посмотреть сообщение
Вам сам яндекс говорит куда копать...
в этом-то и загвоздка:
на странице документации по OAuth для настольных приложений говорится, что получить токен можно следующим образом: направить пользователя на страницу авторизации (можно встроенную в приложение), где он подтверждает доступ, далее яндекс перенаправляет перенаправляет пользователя на адрес, указанный в поле Callback URL при регистрации приложения. Данные о токене передаются в URL перенаправления после символа #.
Чтобы перехватить URL из браузера, в адресе можно использовать собственную схему URI, например myapp://token . Переход по такому URL запустит приложение, которое зарегистрировано в операционной системе как обработчик схемы myapp. Приложение получает адрес перенаправления и извлекает токен (или данные об ошибке).
К сожалению, там нет примеров. Если кто может помочь с этим, прошу написать.
0
1152 / 860 / 263
Регистрация: 30.04.2009
Сообщений: 3,603
14.09.2021, 09:09
Kloshar, вам надо зайти в настройки приложения в яндексе и указать Callback URL. Для настольного приложения без разницы какой.
0
 Аватар для Kloshar
56 / 43 / 27
Регистрация: 19.12.2013
Сообщений: 204
14.09.2021, 09:27  [ТС]
nicolas2008, всё равно не понял.
Сейчас указал Callback URL, например - https://www.cyberforum.ru. Передаю сформированный запрос на https://oauth.yandex.ru/authorize? в браузере открывается сайт cyberforum.ru. В консоле как обычно:
Кликните здесь для просмотра всего текста
StatusCode: 200, ReasonPhrase: 'OK', Version: 1.1, Content: System.Net.Http.StreamContent, Headers:
{
Transfer-Encoding: chunked
Connection: keep-alive
Keep-Alive: timeout=120
Vary: Accept-Encoding
Surrogate-Control: no-store
Pragma: no-cache
Content-Security-Policy: default-src 'none';style-src 'self' yastatic.net 'unsafe-inline' 'unsafe-eval' s3.mds.yandex.net s3.mdst.yandex.net;script-src 'self' yastatic.net mc.admetrica.ru mc.yandex.ru chat.s3.yandex.net api-maps.yandex.ru suggest-maps.yandex.net export.yandex.ru 'unsafe-eval' 'unsafe-inline' 'nonce-ea1ca19d-f65f-43ae-ae31-2e63cb7b422f' https://yandex.ru/global-notif... js;img-src 'self' yastatic.net https://ysa-static.passport.yandex.ru https://ysa-static.passport.yandex.net yandex.st data: mc.admetrica.ru mc.yandex.ru api-maps.yandex.ru *.captcha.yandex.net s3.mds.yandex.net s3.mdst.yandex.net avatars.mds.yandex.net avatars.mdst.yandex.net clck.yandex.ru *.maps.yandex.net yapic.yandex.ru img.yandex.ru static-maps.yandex.ru https://video-tub-ru.yandex.net https://img0-tub-ru.yandex.net https://img1-tub-ru.yandex.net https://img2-tub-ru.yandex.net https://img3-tub-ru.yandex.net blob: mc.webvisor.com mc.webvisor.org;font-src 'self' data: yastatic.net;object-src yastatic.net;media-src *.captcha.yandex.net data:;connect-src mail.yandex.ru 'self' mc.admetrica.ru mc.yandex.ru trust.yandex.ru suggest-maps.yandex.net mc.webvisor.com mc.webvisor.org yandex.ru api.passport.yandex.ru;frame-ancestors 'self';frame-src 'self' yandex.st s4.money.yandex.net https://yandex.ru/chat split.yandex.ru yandex.ru null pass.yandex.ru passport.yandex.ru https://trust.yandex.ru blob: mc.yandex.ru magic.passport.yandex.ru https://yandex.ru/forms https://forms.yandex.ru/;child-src 'self' yandex.st yandex.ru null passport.yandex.ru pass.yandex.ru https://trust.yandex.ru blob: mc.yandex.ru;report-uri https://csp.yandex.net/csp?fro... 1631600483
X-Frame-Options: SAMEORIGIN
Strict-Transport-Security: max-age=15552000; includeSubDomains
Strict-Transport-Security: max-age=315360000; includeSubDomains; preload
X-Download-Options: noopen
X-Content-Type-Options: nosniff
X-DNS-Prefetch-Control: off
X-XSS-Protection: 0
Referrer-Policy: origin
Cache-Control: no-store, must-revalidate, proxy-revalidate, no-cache
Date: Tue, 14 Sep 2021 06:21:23 GMT
P3P: policyref="/w3c/p3p.xml", CP="NON DSP ADM DEV PSD IVDo OUR IND STP PHY PRE NAV UNI"
Set-Cookie: uniqueuid=625973071631600483; Max-Age=315360000; Path=/; Expires=Fri, 12 Sep 2031 06:21:23 GMT; HttpOnly; Secure; SameSite=Lax
Set-Cookie: lah=; Domain=.passport.yandex.ru; Expires=Thu, 01 Jan 1970 00:00:01 GMT; Secure; HttpOnly; Path=/
Server: nginx
X-Yandex-Passport-Authorize: 1
Content-Type: text/html; charset=utf-8
Expires: 0
}

А я так понимаю, что для начала должно отрыться окна авторизации...
0
1152 / 860 / 263
Регистрация: 30.04.2009
Сообщений: 3,603
14.09.2021, 09:51
Kloshar, если в браузере пользователь уже авторизован, то сразу перенаправляет на Callback URL, к которому в конце доклеивается токен авторизации CallbackURL#token.
Для десктопного приложения общая схема насколько я понимаю такая, что приложение должно открыть в браузере url для авторизации, а после перехватить redirect на Callback URL и выцепить оттуда токен. Как это делается гуманным способом не подскажу, но я бы копал в сторону готовых библиотек.
Вот например: https://github.com/alekseynemi... LoginForms
Судя по коду Yandex тоже поддерживается.
0
 Аватар для Kloshar
56 / 43 / 27
Регистрация: 19.12.2013
Сообщений: 204
14.09.2021, 09:56  [ТС]
Спасибо, nicolas2008, буду разбираться!
0
 Аватар для supmener
87 / 95 / 15
Регистрация: 26.06.2013
Сообщений: 4,755
18.02.2022, 21:49
Разобрались? Получаю такую же ошибку. Только взаимодействую с Яндекс метрикой.
0
 Аватар для Kloshar
56 / 43 / 27
Регистрация: 19.12.2013
Сообщений: 204
19.02.2022, 19:14  [ТС]
supmener, supmener,
не уверен, что это поможет с яндекс.метрикой, но выложу свой код для получения токена в яндекс.почте:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
using System;
using System.Net;
using System.Threading;
using System.Windows;
using System.Windows.Controls;
using System.Runtime.InteropServices;
using System.Reflection;
using System.IO;
using System.Text;
using Google.Apis.Gmail.v1;
using Google.Apis.Services;
using Google.Apis.Auth.OAuth2;
using Google.Apis.Util.Store;
using Google.Apis.Util;
using Newtonsoft.Json;
 
 class MailSender
    {
        static readonly Guid SID_SWebBrowserApp = new Guid("0002DF05-0000-0000-C000-000000000046");
        string provider = "";
        string client_id = "";
        string client_secret = "";
        string access_reference = "";
        string code = "";
        string token = "";
        Window w;
 
        public MailSender(string mailProvider) { provider = mailProvider; }
        public string Authorization()
        {
            //в зависимости от почтового сервера выбираем метод получения токена
            if(provider == "yandex.ru")
            {
                //присваиваем значения переменным id и secret
                client_id = "fd154ac773854c0182426823ded58yt";
                client_secret = "re257014f1534f4d88fbd017db2adf87";
 
                //ссылка для перенаправления пользователя на авторизацию
                access_reference = @"https://oauth.yandex.ru/authorize?" + "response_type=code" + "&client_id=" + client_id;
 
                //если файл с токеном доступа существует, то открываем, 
                if (File.Exists("yandex_token.json"))
                {
                    using (StreamReader sr = new StreamReader("yandex_token.json"))
                    {
                        token = sr.ReadToEnd();
                    }
                }
                //если нет, то получаем доступ и записываем в файл
                else
                {
                    Thread newThread = new Thread(this.newWindow);
                    newThread.SetApartmentState(ApartmentState.STA);
                    newThread.Start();
                }
                //приостанавливаем этот поток, чтобы дождаться записи значения переменной token
                for (int i = 0; token == "" & i <= 5; i += 1)
                {
                    Thread.Sleep(1000);
                    Console.WriteLine("Ожидание... Прошло {0} сек. Токен равен {1}!", i, token);
                    if (i == 5)
                    {
                        //нужно дать выбор продолжать ожидание или нет...
                        if (token == "") w.Dispatcher.Invoke(
                            new Action(
                                () =>
                                {
                                    if (MessageBox.Show(w, "Прошло 5 секунд! Если хотите продолжить ожидание - нажмите YES", "Ошибка", MessageBoxButton.YesNo, MessageBoxImage.Error) == MessageBoxResult.Yes)
                                    {
                                        i = 0;
                                    }
                                }));
                    }
                }
            }
            return token;
        }
    }
я удалил код для других провайдеров и методы для создания окошек с авторизацией
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
19.02.2022, 19:14
Помогаю со студенческими работами здесь

Oayth авторизация в яндексе
Народ кто-нибудь пробовал ее реализовать. А то у меня что-то не выходит.

Авторизация на Яндексе используя curl
Доброго времени суток, появилась задача спарсить wordstat через curl. Но яндекс требует авторизации. Понимаю, что это достаточно большая...

Авторизация и сессии. Помогите подправить код. Что бы авторизация проводилась один раз.
Помогите подправить код. Что бы авторизация проводилась один раз, записывалась в сессию каждый раз при переходи от одного линка к другому...

ВЧ, СЧ, НЧ в Яндексе
Посоветуйте плиз, какие запросы считаются ВЧ, СЧ и НЧ Есть какие то определённые цифры независящие от тематике сайта? например ВЧ -...

ИЦ в яндексе
На сайте был индекс цитирования 130... спустя месяц, после обмена ссылками он повысился до 160... затем в течении двух недель он упал до...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru