6

Poiché Parse sta andando via, inizialmente avevo utilizzato l'implementazione _User e PFUser per creare un processo di autenticazione utente.Creazione di un sistema di autenticazione utente per iOS (in precedenza con Parse si spera che AWS)

Da allora ho iniziato a passare a Amazon AWS Mobilie Hub. Ho notato nel sistema di Amazon Cognito che consentono a Google, Facebook, fornitori di credenziali Amazon, che non voglio ancora utilizzare.

Vado a vedere la scelta per un fornitore personalizzato. Devo creare il mio sistema di autenticazione di back-end con un codice lato client e server affinché funzioni?

Esiste un modo semplice (ma sicuro) di accesso per iOS come Parse?

Grazie, qualsiasi aiuto sarebbe apprezzato (letto molto online).

+0

Questo è abbastanza ampio, ma spero che la risposta aiuta - Le domande dovrebbero essere più concentrati sul problema esatto sei avendo. Non "Come faccio a fare questo" - più di "Perché questo codice non funziona" – iSkore

risposta

8

Sì, uso sempre l'autenticazione personalizzata AWS.

Check this out e un altro answer I posted for custom authentication here

Quindi i passaggi sono:

  1. Impostare Cognito per autenticare gli utenti UNanthenticated
    • Devi fare questo altrimenti non saranno in grado di accedere a qualsiasi cosa prima del accesso. unauthenticated user

e la vostra autentica utente Nome Developer < - parte importante

developer name

  1. Configurare DynamoDB (o qualsiasi altra cosa) per memorizzare il vostro nome utente- Informazioni sulla password

  2. Passare a IAM e creare un ruolo AUTHENTICATED e un ruolo UNAUTHENTICATED.

  3. vi diamo il ruolo UNAUTHENTICATED, assegnare:

    AmazonCognitoDeveloperAuthenticatedIdentities AmazonDynamoDBFullAccess (se si vuole un sistema Registrati Login &) AmazonDynamoDBReadOnlyAccess (se desideri solo login)

IAM roles

  1. Anche andare in un ND fare:

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. Ora rendere il vostro AUTHENTICATED ruolo e assegnare:

    AmazonCognitoPowerUser AmazonDynamoDBFullAccess AmazonSNSFullAccess - per esempio, e qualsiasi altra cosa che desideri

  2. Anche andare a fare:

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. Ora, questo dovrebbe essere mobile hub responsabilità, ma dal momento che è venuto fuori con questo, tutti pensa di essere sollevato dalla responsabilità! Non è il caso! Hai bisogno di sapere che cosa sts:AssumeRoleWithWebIdentity

  2. Ora che hai tutto impostato, avviare il modulo progetto Xcode mobile Hub

  3. Compila tutti i dati (se non c'è, che dovrebbe essere a causa Mobile Hub è bello per noi) per il vostro AUTHENTICATED ARN e la vostra UNATHENTICATED ARN

  4. Impostare la pagina di login

  5. quando l'utente passa il login, (cifrare la password) e inviare tale e il nome utente per DynamoDB.

12B. Mi piace molto usare Lambda PARTICOLARMENTE per cellulari perché puoi fare molto di più E tu sei meno incline agli errori E hai più controllo, ecc.

Quindi, con quello detto, torna al punto 4 & 6 SE tu desidera utilizzare Lambda e aggiungere e Inline Policy allo Roles. IAM -> Ruoli -> Il vostro ruolo ->Create Role Policy e pop in:

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

Ora che avete la base di set up, tornare a Xcode.

  1. se si utilizza Lambda, inviare il nome utente e la password, lasciate lambda tirare la riga dalla DynamoDB e fare il controllo sulla does the user exist, if so do the passwords match

dovrebbe essere simile a questo in 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'); 
     } 
    }); 
}; 

Dopo aver ottenuto i data.Items torna in Xcode, chiamare questa funzione lambda, inviare le variabili, e quando dicono "buona", chiamare:

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

Seguito da credentialsProvider.refresh();

Quella parte di cui sopra dovrebbe essere nel vostro progetto Xcode da MobileHub.

Ora, questo è stato se le cose si fanno strane. Ci sono un sacco di modi per farlo. TVM, Cognito Assumere Auth, lato server, ecc

ho sempre riassumere autenticazione da Unauthenticated a Authenticated, ma devi fare un sacco di roba di back-end, se si vuole ottenere di analisi reali sia dal lato web e mobile lato, se lo stai facendo per entrambi. Ma una volta che hai il tuo utente autenticato, ora hai un utente ben autenticato, pronto ad accedere a qualsiasi cosa elencata nel Passaggio 6 come autenticato!

Spero che questo aiuti.

Aggiornamento --- Questo è un modo sporco, pericoloso, ma veloce per farlo. NON PER PRODUZIONE.

In cognito, non creare nemmeno un Authenticated user role. Lascia la tua Unauthenticated user role tutti i permessi per fare tutto (DynamoDBFullAccess, S3FullAccess, EC2FullAccess, ecc)

quindi gestire l'autenticazione del telefono - Controllare il nome utente e la password contro DynamoDB e poi se restituisce le informazioni, impostare una variabile a TRUE . Questo non è sicuro perché l'utente ora ha accesso a tutte le tue cose, ma sarebbe simile a questa:

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

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

Fantastico questo è più di quello che sto cercando. Quindi questo è tutto su AWS e il mio progetto Xcode iOS è corretto? – cdub

+0

Cosa intendi con * questo *. Sto solo cercando di capire meglio – iSkore

+0

Oh intendi "Questo" e tutti questi passaggi? Esatto, non c'è bisogno di un'altra parte come Parse o qualcosa del genere. ** Anche se **, si consiglia di dare l'opzione per le opzioni di login di Google, Facebook e Amazon – iSkore

Problemi correlati