Цифры iOS OAuthEcho Issue

Я работаю над приложением iOS и django, которое использует цифры твиттера для аутентификации. Я уже некоторое время сижу с документацией и не знаю, что делаю неправильно.

Коммуникационная модель заключается в том, что пользователь регистрируется в приложении iOS на платформе Twitter Digits. Это отправляет текстовое сообщение пользователю с кодом подтверждения, чтобы подтвердить личность пользователя. Когда личность пользователя будет подтверждена, я бы хотел, чтобы приложение iOS уведомило сервер, чтобы сервер мог создать новую модель пользователя и надежно сохранить номер телефона пользователя.

В настоящее время ответ из цифр твиттера в строке 8:

{"errors":[{"code":215,"message":"Bad Authentication data."}]}

Вещи, которые я пробовал / сделал:

1) Я трижды, в четыре раза проверил, что ключ потребителя, секрет потребителя и ключ API соответствуют приложению в Fabric.

2) Используются разные методы, кроме OAuthEchoHeadersToVerifyCredentials в том числе OAuthEchoHeadersForRequestMethod а также OAuthEchoHeadersToVerifyCredentialsWithParams

3) Отлажено с помощью веб-интерфейса, который работает. Это дало понять, что информация аутентификации, отправляемая приложением ios, является сомнительной.

Код бэкэнда выглядит следующим образом:

def signup(request):
    api_url = request.POST['apiUrl']
    auth_headers = request.POST['authHeader']

    # security stuff done here

    headers = {'Authorization': auth_headers}
    response = requests.get(api_url, headers=headers) # Line 8
    data = json.loads(response.content)

    user, created = User.objects.get_or_create(
        phone_number=data['phone_number'],
        digits_id=data['id'],
        first_name=request.POST['firstName'],
        last_name=request.POST['lastName']
    )

    return JsonResponse({'success': True, 'created': created})

И код внешнего интерфейса выглядит следующим образом:

@IBAction func goToNextView() {
        let firstName = "Joe"
        let lastName = "Schmoe"

        let digits = Digits.sharedInstance()
        digits.authenticateWithCompletion { (session, error) in
            if (session != nil) {
                let digits = Digits.sharedInstance()
                let oauthSigning = DGTOAuthSigning(authConfig: digits.authConfig, authSession: session)

                let authHeaders = oauthSigning.OAuthEchoHeadersToVerifyCredentials()

                let apiUrl = authHeaders[TWTROAuthEchoRequestURLStringKey]
                let authHeader = authHeaders[TWTROAuthEchoAuthorizationHeaderKey]

                let url = NSURL(string: "http://localhost:8000/signup")

                let request = NSMutableURLRequest(URL: url!)
                request.HTTPMethod = "POST"

                let bodyData = "apiUrl=\(apiUrl!)&authHeader=\(authHeader!)&firstName=\(firstName)&lastName=\(lastName)"
                request.HTTPBody = bodyData.dataUsingEncoding(NSUTF8StringEncoding)

                self.defaultSession.dataTaskWithRequest(request, completionHandler: { (data, response, error) in
                    print("todo")
                }).resume()                    
            }
        }
    }

Для справки веб-интерфейс выглядит следующим образом:

Digits.logIn()
  .done(onLogin) 

function onLogin(loginResponse){
  // Send headers to your server and validate user by calling Digits’ API
  var oAuthHeaders = loginResponse.oauth_echo_headers;
  var verifyData = {
    authHeader: oAuthHeaders['X-Verify-Credentials-Authorization'],
    apiUrl: oAuthHeaders['X-Auth-Service-Provider'],
    firstName: $('#firstName').val(),
    lastName: $('#lastName').val()
  };

  $.post('/signup', verifyData)
    .done(function(response){ alert(response); });
}    

В двух внешних интерфейсах заголовки аутентификации, которые отличаются: oauth_nonce, oauth_signature и, очевидно, oauth_timestamp

Тем не менее, эти два ресурса: Oauth_consumer_key, oauth_token, версия и метод подписи

Если кто-то сталкивался с чем-то подобным, пожалуйста, дайте мне знать. Спасибо!

0 ответов

Другие вопросы по тегам