Перейти к содержанию

CLASS

AuthorizationSession

public class AuthorizationSession : Codable

Клиентский refresh-token авторизации

После установления, сессия авторизации метод establish(_:) продолжает обновлять доступ и refresh token-ы по требованию. В случае истечения срока действия токена, генерируется исключение и метод останавливается пока не создастся новая сессия.

Для нескольких параллельных сессий нужно предоставить точный и стабильный для каждой сессии tokenId (например ID устройства).

Заметьте

Периодического обновления не происходит в режиме ожидания, поэтому срок действия сессии неминуемо истечет. Однако, можно периодически вызывать метод refresh().

Методы

init(url:tokenId:permissions:)

public init(url: String, tokenId: String, permissions: [String])

Пример

 let auth = AuthorizationSession(url: "https://api-cloud-dev.spatium.io/authorization/v1", tokenId: UUID().uuidString, permissions: ["read", "secret"])

 let data = try await jsonPost(
     "https://api-cloud-dev.spatium.io/authorization/v1/api/security-factor/credentials",
     [
         "request-id" : UUID().uuidString
     ],
     CredentialsRequest(
         username: "mario",
         password: "123456"
     ),
     CredentialsResponse.self
 )

 try await auth.establish([data.data.securityToken]);

 let first = try await auth.getPermissionToken();

 try await Task.sleep(nanoseconds: 2_000_000_000)

 try await auth.refresh();

 let second = try await auth.getPermissionToken();

 XCTAssertFalse(first == second)

Параметры

Имя Описание
url authorization service эндпоинт (HTTP(S))
tokenId ID сессии авторизации, контролирует несколько параллельных сессий
permissions список необходимых разрешений для этой сессии

establish(_:)

public func establish(_ securityTokens: [String]) async throws

Устанавливает новую сессию авторизации, заменяет предыдущую если она была.

Этот метод производит получение первоначального токена, и может быть вызван снова (с валидным токеном) чтобы аннулировать предыдущий refresh token. Перед установкой сессии не должно быть произведено никаких операций с токеном.

Параметры

Имя Описание
securityTokens список собранных токенов безопасности, достаточных для получения разрешений

refresh()

public func refresh() async throws

Обновление сессии вручную

Этот метод вызывается внутренне, выдает ошибку если действие refresh токена уже истекло.

getPermissionToken()

public func getPermissionToken() async throws -> String

Получение текущего permission (access) токена

Пока действие refresh токена не истекло, этот метод всегда будет возвращать валидный токен доступа и обновляет его при необходимости

Возвращает

String

permission токен по параметрам конструктора