Аутентификация в API

  1. Для выполнения операций через API получите токен:

    KC_USER='****'
    KC_PASSWORD='****'
    RESPONSE=`curl -d 'client_id=public-cli' -d 'grant_type=password' -d "username=$KC_USER" -d "password=$KC_PASSWORD" -d "scope=openid offline_access" 'https://auth.sbercloud.ru/auth/realms/CP/protocol/openid-connect/token' 2>/dev/null`
    TOKEN=`echo $RESPONSE | jq ".access_token" | tr -d '"'`
    REFRESH_TOKEN=`echo $RESPONSE | jq ".refresh_token" | tr -d '"'`
    

    Где KC_USER и KC_PASSWORD — ваш логин и пароль от Личного Кабинета SberCloud.

    Внимание

    Сохраните полученный REFRESH_TOKEN для дальнейшего использования. Время его действия не ограничено.

  2. С помощью Refresh-токен получите Access-токен:

    curl -d 'client_id=public-cli' -d 'grant_type=refresh_token' -d "refresh_token=$REFRESH_TOKEN" 'https://auth.sbercloud.ru/auth/realms/CP/protocol/openid-connect/token' 2>/dev/null | jq ".access_token" | tr -d '"'
    
  3. Полученный токен передайте в заголовке Authorization в следующем формате:

    Authorization: Bearer {{access_token}}
    
  4. При необходимости продлите срок действия токена:

    #!/bin/bash
    
    TOKEN_FILE="/tmp/access_token"
    REFRESH_TOKEN=""
    NOW=`date +%s`
    
    if [ -f $TOKEN_FILE ]; then
      TOKEN=`cat $TOKEN_FILE`
      TOKEN_EXP=`echo $TOKEN | jq -R 'split(".") | .[1] | @base64d | fromjson | .exp'`
    fi
    
    if [ -z $TOKEN ] || [ $(( $TOKEN_EXP - $NOW  )) -le 300 ]; then
      echo "token is not defined or renew required"
      TOKEN=`curl -d 'client_id=public-cli' -d 'grant_type=refresh_token' -d "refresh_token=$REFRESH_TOKEN" 'https://auth.sbercloud.ru/auth/realms/CP/protocol/openid-connect/token' 2>/dev/null | jq ".access_token" | tr -d '"'`
      echo $TOKEN > $TOKEN_FILE
    fi