Мне нужно аутентифицировать пользователя с помощью 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