6

Od czasu, gdy Parse odchodzi, początkowo użyłem ich implementacji _User i PFUser do stworzenia procesu uwierzytelniania użytkownika.Tworzenie systemu uwierzytelniania użytkowników dla systemu iOS (poprzednio z analizą składni, mam nadzieję, że AWS)

Od tego czasu przerzucam się na Amazonkę AWS Mobilie Hub. Zauważyłem w systemie Amazon Cognito, że dopuszczają dostawców usług Google, Facebook, Amazon, których nie chcę jeszcze używać.

Poszedłem zobaczyć wybór dla niestandardowego dostawcy. Czy muszę utworzyć własny autorski system zaplecza za pomocą kodu klienta i kodu serwera, aby to działało?

Czy istnieje prosty sposób (ale bezpieczny) proces logowania dla systemu iOS, taki jak Parse?

Dzięki, każda pomoc byłaby doceniana (dużo czytano w Internecie).

+0

Jest to dość szerokie, ale nadzieję, że odpowiedź pomaga - Pytania powinny być bardziej skoncentrowane na dokładnym problemu jesteś mający. Nie "Jak to zrobić" - więcej "Dlaczego ten kod nie działa"? – iSkore

Odpowiedz

8

Tak, używam zawsze niestandardowego uwierzytelniania AWS.

Check this out i inny answer I posted for custom authentication here

Więc kroki są:

  1. Konfigurowanie Cognito uwierzytelnić UNanthenticated użytkowników
    • Trzeba to zrobić, w przeciwnym razie nie będzie w stanie uzyskać dostęp do niczego przed logowanie. unauthenticated user

i twój autentyczny użytkownik Nazwa Twórca < - ważną częścią

developer name

  1. Konfigurowanie DynamoDB (lub cokolwiek) do przechowywania username- Informacje o haśle

  2. Przejdź do formularza IAM i wykonaj rolę AUTHENTICATED i rolę .

  3. Dajesz UNAUTHENTICATED rolę należy przypisać:

    AmazonCognitoDeveloperAuthenticatedIdentities AmazonDynamoDBFullAccess (jeśli chcesz Logowanie & systemu rejestru) AmazonDynamoDBReadOnlyAccess (jeśli chcą tylko logowanie)

IAM roles

  1. Przejdź także do nd zrobić:

Edit Trust Relationship

{ 
    "Version": "2012-10-17", 
    "Statement": [{ 
     "Effect": "Allow", 
     "Principal": { 
      "Federated": "cognito-identity.amazonaws.com" 
     }, 
     "Action": "sts:AssumeRoleWithWebIdentity", 
     "Condition": { 
      "StringEquals": { 
       "cognito-identity.amazonaws.com:aud": "<YOUR_COG_ARN>" 
      }, 
      "ForAnyValue:StringLike": { 
       "cognito-identity.amazonaws.com:amr": "unauthenticated" 
      } 
     } 
    }] 
} 
  1. teraz uczynić swoją rolę AUTHENTICATED i przypisać:

    AmazonCognitoPowerUser AmazonDynamoDBFullAccess AmazonSNSFullAccess - na przykład, cokolwiek jeszcze chcesz

  2. Również iść i zrobić:

Edit Trust Relationship

{ 
    "Version": "2012-10-17", 
    "Statement": [{ 
     "Effect": "Allow", 
     "Principal": { 
      "Federated": "cognito-identity.amazonaws.com" 
     }, 
     "Action": "sts:AssumeRoleWithWebIdentity", 
     "Condition": { 
      "StringEquals": { 
       "cognito-identity.amazonaws.com:aud": "<YOUR_COG_ARN>" 
      }, 
      "ForAnyValue:StringLike": { 
       "cognito-identity.amazonaws.com:amr": "authenticated" 
      } 
     } 
    }] 
} 

PLEASE NOTICE THE ONE CHANGE MADE - "authenticated" and "unauthenticated"

  1. teraz powinno być ruchome koncentratory odpowiedzialność, ale skoro wyszli z tego wszyscy myśli, że są zwolnieni z odpowiedzialności! Nie w tym przypadku! Trzeba wiedzieć, co sts:AssumeRoleWithWebIdentity

  2. Teraz, gdy już wszystko skonfigurować, uruchomić Xcode formę projektu mobilnego Hub

  3. Wypełnij wszystkie dane (jeśli jej nie ma, co powinno być, ponieważ Mobile Hub jest miły dla nas) dla AUTHENTICATED ARN i swojej UNATHENTICATED ARN

  4. skonfigurować stronę logowania

  5. Gdy użytkownik przechodzi do logowania (szyfrować swoje hasło) i wyślij że i login do DynamoDB.

12B. Bardzo lubię korzystać z Lambda w sposób komórkowy, ponieważ naprawdę możesz zrobić o wiele więcej I jesteś mniej podatny na błędy I masz większą kontrolę, itp.

W związku z tym wróć do kroku 4 & 6 JEŚLI chcesz użyć Lambda i dodać i Inline Policy do Roles. IAM -> -> Role swoją rolę ->Create Role Policy i pop w:

{ 
    "Version": "2012-10-17", 
    "Statement": [{ 
     "Sid": "", 
     "Effect": "Allow", 
     "Principal": { 
      "Service": "lambda.amazonaws.com" 
    }, 
    "Action": "sts:AssumeRole" 
    }] 
} 

Teraz masz podstawę utworzenia, wróć do Xcode.

  1. jeśli używasz lambda wysłać swoją nazwę użytkownika i hasło, niech lambda wyciągnąć wiersz z DynamoDB i zrobić czek na does the user exist, if so do the passwords match

powinien wyglądać mniej więcej tak w Lambda:

const 
    AWS = require('aws-sdk'), 
    ddb = new AWS.DynamoDB() 

exports.handler = function(event, context) { 
    var params = { 
     TableName : '<users>', 
     KeyConditionExpression : 'userType = :v_type AND username = :v_user', 
     FilterExpression : 'password = :v_pass', 
     ExpressionAttributeValues : { 
      ':v_type' : { S : '<superdooper>' }, 
      ':v_user' : { S : event.username }, 
      ':v_pass' : { S : event.password } 
     } 
     //ProjectionExpression: 'email, joinDate, phone' (OPTIONAL) 
    } 
    ddb.query (params, function(err, data) { 
     if (err) { 
      context.fail (JSON.stringify(err, null, 2)); 
     } else { 
      if (data.Count !== 0) 
       context.succeed (data.Items); 
      else 
       context.succeed ('Wrong Info'); 
     } 
    }); 
}; 

po uzyskaniu data.Items powrotem w Xcode, wywołać tę funkcję lambda, wysłać w zmiennych, a kiedy powiedzieć "dobra", zadzwoń:

credentialsProvider.setLogins({developerAuthenticationProvider.getProviderName(), developerUserIdentifier}); 

Obserwowani przez credentialsProvider.refresh();

że część powyżej powinny być w projekcie Xcode od MobileHub.

Teraz to wszystko stało się dziwne. Istnieje mnóstwo sposobów na zrobienie tego. TVM, Cognito Załóżmy Auth, po stronie serwera, itp

zawsze reassume uwierzytelniania z Unauthenticated do Authenticated, ale trzeba zrobić wiele rzeczy back-end, jeśli chcesz uzyskać prawdziwe analityki zarówno od strony internetowej i mobilnej strony, jeżeli robisz to dla obu. Ale gdy masz już uwierzytelnionego użytkownika, masz teraz dobrze uwierzytelnionego użytkownika, gotowy do dostępu do wszystkiego, co wymienione w kroku 6 jako uwierzytelnione!

Mam nadzieję, że to pomoże.

Aktualizacja --- To jest brudny, niebezpieczny, ale szybki sposób, aby to zrobić. NIE DO PRODUKCJI.

W cognito nie rób nawet Authenticated user role. Daj Unauthenticated user role wszystkie uprawnienia do zrobienia wszystkiego (DynamoDBFullAccess, S3FullAccess, EC2FullAccess, etc)

Następnie obsługiwać uwierzytelnianie w telefonie - Sprawdź nazwę użytkownika i hasło przed DynamoDB a następnie, jeśli to zwraca informację, należy ustawić zmienną do TRUE . To nie jest bezpieczne, ponieważ użytkownik ma teraz dostęp do wszystkich swoich rzeczy, ale to będzie wyglądać następująco:

BOOL loggedIn = FALSE; 
if (loggedIn) { 
    [self loadView]; 
} else { 
    [self loadLoginView]; 
} 

- (void) loadLoginView { 
    DynamoDBCall (username, password) withCompletion() { 
     if (allGood) { 
      _loggedIn = TRUE; 
     } 
    } 
} 
+0

Niesamowite, to więcej tego, czego szukam. Czy to wszystko jest poprawne w AWS, a mój projekt Xcode iOS? – cdub

+0

Co masz na myśli przez * to *. Po prostu staram się lepiej zrozumieć – iSkore

+0

Masz na myśli "To" i wszystkie te kroki? Prawidłowo, nie ma potrzeby, aby inna impreza jak Parse lub coś podobnego. ** Chociaż **, zalecane jest podanie opcji logowania Google, Facebook i Amazon – iSkore