<key>LSApplicationQueriesSchemes</key>
<array>
<string>vkauthorize-silent</string>
</array>
<key>CFBundleURLTypes</key>
<array>
<dict>
<key>CFBundleTypeRole</key>
<string>Editor</string>
<key>CFBundleURLName</key>
<string>auth_callback</string>
<key>CFBundleURLSchemes</key>
<array>
<string>vk7915193</string> // Вместо 7915193 подставьте ID вашего приложения.
</array>
</dict>
</array>
let url = "https://id.vk.ru/authorize?state=abracadabra&response_type=code&code_challenge=VT6yRsqMDL8EgEfcGmtWVaaLzTw5KcuKBoGEmfDBJaw&code_challenge_method=S256&client_id=7915193&redirect_uri=vk7915193://vk.ru/blank.html&prompt=login&scope=phone%20email"
let session = ASWebAuthenticationSession(
url: url,
callbackURLScheme: "vk7915193" // Идентификатор вашего приложения, например 7915193.
) { [weak self] callbackUrl, error in
guard let self = self else {
return
}
self.session = nil
self.handleCallback(callbackUrl, error) // Обработка url, на который произошел редирект.
}
self.session = session
session.start()
Название | Описание |
---|---|
client_id | Идентификатор вашего приложения |
redirect_uri | Адрес, куда будет перенаправлен пользователь после авторизации. Например vk7915193://vk.ru/service.html, где 7915193 — идентификатор вашего приложения. Должен в точности совпадать с тем адресом, который был указан в настройках приложения |
state | Произвольная строка. Проверяется на шаге 2 |
code_challenge | Значение code_verifier, преобразованное с помощью code_challenge_method и закодированное в base64. Порядок преобразований: BASE64-ENCODE(SHA256(codeVerifier)) RFC-7636 Code Challenge |
code_challenge_method | Метод шифрования для генерации code_challenge на основе code_verifier, константа. Всегда принимает значение S256 |
response_type | Тип ответа авторизации. В нашем случае равен code |
prompt | Параметр позволяет изменить способ прохождения авторизации, по умолчанию пустое значение. Однако мы рекоммендуем прописать значение login — так, пользователю всегда будет предлагаться пройти процедуру аутентификации, даже если пользователь уже залогинен в VK ID. |
scope | Список прав доступа, которые нужны приложению. Если параметр не указан, то берётся минимальное значение прав доступа по умолчанию для приложений — vkid.personal_info. В примере выше мы указали доступы к email, phone. |
Название | Описание |
---|---|
device_id | Зашифрованный идентификатор устройства |
state | Произвольная строка, переданная на шаге 1 |
code | Код авторизации |
type | Тип кода авторизации. В нашем случае code_v2 |
vk7915193://vk.ru/blank.html?device_id=generatedencrypteddeviceid123&state=abracadabra&code=vk2.a.FmLgF_...&type=code_v2
vk7915193://?code=vk2.a.FmLgF_...&device_id=generatedencrypteddeviceid123&state=abracadabra&type=code_v2&vkconnect_auth_provider_method=external_auth
func application(
_ app: UIApplication,
open url: URL,
options: [UIApplication.OpenURLOptionsKey : Any] = [:]
) -> Bool {
// Обработчик url.
}
func scene(
_ scene: UIScene,
openURLContexts URLContexts: Set<UIOpenURLContext>
) {
URLContexts.forEach { ctx in
// Добавьте обработчик ctx.url.
}
}
var body: some Scene {
WindowGroup {
ContentView()
.onOpenURL { url in
// Добавьте обработчик url.
}
}
}
curl --location 'https://id.vk.ru/oauth2/auth?grant_type=authorization_code&redirect_uri=vk7915193%3A%2F%2Fvk.ru%2Fblank.html&client_id=7915193&device_id=generatedencrypteddeviceid123&state=abracadabracodeexchange&code_verifier=TMqwHtKeYrAz42vNmy5KsxePTYt--KS-yZsma6q4vrE' \
--data '{
"code": "vk2.a.02-Bsy..."
}'
Название | Описание |
---|---|
code | Код авторизации, полученный на втором шаге |
code_verifier | code_verifier из первого шага |
client_id | Идентификатор приложения |
grant_type | Тип ответа. В нашем случае будет authorization_code |
redirect_uri | Адрес для редиректа после авторизации. Такой же, как на первом шаге |
state | Произвольная строка. Опциональный параметр |
device_id | Идентификатор устройства, полученный на втором шаге |
{
"refresh_token": "vk2.a.pkzh...",
"access_token": "vk2.a.hD-D9...",
"id_token": "eyJ0eXAiOi...",
"token_type": "Bearer",
"expires_in": 3600,
"user_id": 1234567890,
"state": "abracadabracodeexchange",
"scope": "vkid.personal_info email phone"
}
curl --location 'https://id.vk.ru/oauth2/auth?grant_type=refresh_token&client_id=7915193&device_id=generatedencrypteddeviceid123' \
--header 'Content-Type: application/json' \
--data '{
"refresh_token": "vk2.a.pkzh..."
}'
Название | Описание |
---|---|
grant_type | Тип ответа. В нашем это refresh_token |
refresh_token | refresh_token, полученный на третьем шаге |
device_id | Идентификатор устройства, полученный на втором шаге |
client_id | Идентификатор приложения |
{
"refresh_token": "vk2.a.iiG...",
"access_token": "vk2.a.02R...",
"token_type": "Bearer",
"expires_in": 3600,
"user_id": 1234567890,
"state": "",
"scope": "vkid.personal_info email phone"
}
curl --location 'https://id.vk.ru/oauth2/logout?client_id=7915193' \
--header 'Authorization: Bearer vk2.a.02R...'
Название | Описание |
---|---|
access_token | access_token, полученный на третьем шаге |
client_id | Идентификатор приложения |
{
"response": 1
}
curl --location 'https://id.vk.ru/oauth2/user_info' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer vk2.a.02R...' \
--data '{
"client_id":"7915193"
}'
Название | Описание |
---|---|
access_token | access_token, полученный на третьем шаге |
client_id | Идентификатор приложения |
{
"user": {
"user_id": "1234567890",
"first_name": "Ivan",
"last_name": "Ivanov",
"phone": "79991234567",
"avatar": "https://pp.userapi.com/60tZWMo4SmwcploUVl9XEt8ufnTTvDUmQ6Bj1g/mmv1pcj63C4.png",
"email": "ivan_i123@vk.ru",
"sex": 2,
"verified": false,
"birthday": "01.01.2000"
}
}
curl --location 'https://id.vk.ru/oauth2/public_info?client_id=51923592' \
--header 'Content-Type: application/json' \
--data '{
"id_token": "eyJ0eXAiOi..."
}'
Название | Описание |
---|---|
id_token | id_token, полученный на третьем шаге |
client_id | Идентификатор приложения |
{
"user": {
"user_id": "1234567890",
"first_name": "Ivan",
"last_name": "I.",
"phone": "+42872 *** ** 29",
"avatar": "https://pp.userapi.com/60tZWMo4SmwcploUVl9XEt8ufnTTvDUmQ6Bj1g/mmv1pcj63C4.png",
"email": "iv***@vk.vom"
}
}