Клиентская OAuth авторизация в сети Одноклассники, используя Delphi 7
Начал заниматься этой темой и не нашел более менее актуальных статей на данный момент. Большинство из них написаны более двух-трёх лет назад и некоторые моменты всё же изменились.
Всё начинается с создания и регистрации на ok.ru своего приложения. Хотя этот процесс более менее описан, но есть кое какие нюансы:
- в списке разрешенных адресов нужно указать адреса редиректа redirect_uri и использовать только их, иначе при авторизации с будет выведена ошибка об использовании неразрешенного адреса. Рекомендуется адрес писать с https, т.к Одноклассники с какого-то времени серьезно занялись проблемой защищенности соцсети и их сервер может при возможности ругаться по этому поводу;
- нужно поставить галку чекбокса о разрешении OAuth авторизации, иначе авторизации по этому протоколу не будет;
- у только что созданного приложения нет практически никаких прав: отсутствует доступ к группам и право использовать токены (то есть все те, что отмечены на картинке ниже красными галочками). Их нужно запрашивать у поддержки по адресу api-support@ok.ru. После того, как разрешения будет получены, они появятся на странице приложения.
Дальше переходим непосредственно к авторизации. Кинем на форму компонент Edit и WebBrowser. Edit1 будет отображать адресную строку браузера WebBrowser.
Важно правильно составить только строку авторизации. Сам код (использую synapse библиотеку):
unit Unit2; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls,Forms, Dialogs, StdCtrls,synacode,httpsend,ssl_openssl, OleCtrls, SHDocVw, Menus, ComCtrls, ExtCtrls, Buttons, ActiveX,ClipBrd; type TForm2 = class(TForm) WebBrowser1: TWebBrowser; Edit1: TEdit; procedure FormShow(Sender: TObject); procedure SaveOptions; procedure WebBrowser1DocumentComplete(Sender: TObject; const pDisp: IDispatch; var URL: OleVariant); private { Private declarations } public { Public declarations } end; var Form2: TForm2; implementation {$R *.dfm} procedure TForm2.FormShow(Sender: TObject); begin Form2.WebBrowser1.Navigate('https://connect.ok.ru/oauth/authorize?client_id=ваш_id&scope=GROUP_CONTENT;VALUABLE_ACCESS;LONG_ACCESS_TOKEN&response_type=token&redirect_uri='+EncodeURL(AnsiToUtf8('https://api.ok.ru/blank.html'))+'&layout=w'); end; procedure TForm2.WebBrowser1DocumentComplete(Sender: TObject; const pDisp: IDispatch; var URL: OleVariant); begin Edit1.Text:=URL; end; end. |
Примечания к коду:
- В строке client_id=ваш_id нужно, как очевидно, поставить идентификатор своего приложения.
- redirect_uri=’+EncodeURL(AnsiToUtf8(‘https://api.ok.ru/blank.html’)) — это строка кодируется и преобразовывается, чтобы при ее передаче не возникали спецсимволы.
- https://api.ok.ru/blank.html — это адрес редиректа, сюда можно поставить что угодно, но, главное, чтобы совпадало с адресом в настройках приложения на ok.ru.
Компилируем и запускаем. Сразу браузер перейдет по строке авторизации и предложит ввести логин и пароль.
после правильного ввода логина и пароля, браузер перейдет к строке редиректа, в которой через символ решетки будет указаны access_token и session_secret_key
Собственно, получив эти два значения мы можем пользоваться методами API OK и отправлять запросы. Задача выполнена.
P.S. Конечно, большинство интересуются методами, связанными с поиском пользователей. Но таких методов, к сожалению, нет и найти конкретного человека или группу людей по своему запросу не получится. Одноклассники таят эти методы в своих недрах и никого к ним не подпускают. Поэтому так мало информации по работе с методами этой соцсети, т.к. функционал предоставляет очень скудный.