Sì, uso sempre l'autenticazione personalizzata AWS.
Check this out e un altro answer I posted for custom authentication here
Quindi i passaggi sono:
- Impostare Cognito per autenticare gli utenti UNanthenticated
- Devi fare questo altrimenti non saranno in grado di accedere a qualsiasi cosa prima del accesso.
e la vostra autentica utente Nome Developer < - parte importante
Configurare DynamoDB (o qualsiasi altra cosa) per memorizzare il vostro nome utente- Informazioni sulla password
Passare a IAM e creare un ruolo AUTHENTICATED
e un ruolo UNAUTHENTICATED
.
vi diamo il ruolo UNAUTHENTICATED
, assegnare:
AmazonCognitoDeveloperAuthenticatedIdentities AmazonDynamoDBFullAccess (se si vuole un sistema Registrati Login &) AmazonDynamoDBReadOnlyAccess (se desideri solo login)
- 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"
}
}
}]
}
Ora rendere il vostro AUTHENTICATED
ruolo e assegnare:
AmazonCognitoPowerUser AmazonDynamoDBFullAccess AmazonSNSFullAccess - per esempio, e qualsiasi altra cosa che desideri
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"
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
Ora che hai tutto impostato, avviare il modulo progetto Xcode mobile Hub
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
Impostare la pagina di login
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.
- 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;
}
}
}
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