Apple Auth не работает на Ruby on Rails Backend

Мне нужно аутентифицировать пользователя с помощью Apple Auth в мобильном приложении. Я получил IdentityToken, User и AuthCode из запроса API из мобильного приложения.

Мне нужно аутентифицировать пользователя и получить его электронную почту. Мой класс AppleId всегда возвращает «invalid_client«.

Может у меня в логике какие-то ошибки?


class AppleId

    URL = 'https://appleid.apple.com/auth/token'
    ISSUER = 'https://appleid.apple.com'
    TEAM_ID = '6Z******38'
    KEY_ID = '33******KP'
    IDENTIFIER = 'ru.k*************on'
    PRIVATE_KEY = <<-PEM
-----BEGIN PRIVATE KEY-----
MIGTA**********z7
-----END PRIVATE KEY-----
PEM

    def initialize
      @private_key = OpenSSL::PKey::EC.new PRIVATE_KEY
    end    

    def authenticate(code)
      make_request(code)
    end

    private 

    def make_request(code) 
      uri = URI.parse(URL) 
      http = Net::HTTP.new(uri.host, uri.port)
      http.use_ssl = true

      request = Net::https::Post.new(uri.request_uri)

      params =  {
        client_id: IDENTIFIER,
        client_secret: client_secret_jwt,
        code: code,
        grant_type: 'authorization_code' 
       }

       request.set_form_data(params)
       response = http.request(request)
       response.body
    end

    def client_secret_jwt
      jwt = JSON::JWT.new(
        iss: TEAM_ID,
        aud: ISSUER,
        sub: IDENTIFIER,
        iat: Time.now,
        exp: 1.minutes.from_now
      )
      jwt.kid = KEY_ID
      JWT.encode jwt, @private_key, 'ES256'
    end

end

В моем контроллере:

authCode = params[:auth_code]

AppleId.new.authenticate(authCode)
=> "{\"error\":\"invalid_client\"}"

Это Ruby gem, который делает это, и его README включает ссылку на пример проекта Rails, чтобы проиллюстрировать, как это работает. Я знаю, что это не дает прямого ответа на ваш вопрос, но, возможно, это поможет вам понять, как решить проблему. РЕДАКТИРОВАТЬ: Также есть суть.   —  person Mike Havit    schedule 27.12.2019

Кроме того, хотя он не касается конкретно Rails, этот пост может быть полезен: Войти через Apple (приложение iOS + проверка бэкэнда) API возвращает ошибка «invalid_client»   —  person Mike Havit    schedule 27.12.2019

У меня тоже была аналогичная проблема. Client_id на сервере должен быть ServiceId не AppId   —  person Mike Havit    schedule 02.01.2020

См. также:  Как сохранить место для хранения и время загрузки с помощью Active Storage?
Понравилась статья? Поделиться с друзьями:
IT Шеф
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: