Tak, używam zawsze niestandardowego uwierzytelniania AWS.
Check this out i inny answer I posted for custom authentication here
Więc kroki są:
- 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.
i twój autentyczny użytkownik Nazwa Twórca < - ważną częścią
Konfigurowanie DynamoDB (lub cokolwiek) do przechowywania username- Informacje o haśle
Przejdź do formularza IAM i wykonaj rolę AUTHENTICATED
i rolę .
Dajesz UNAUTHENTICATED
rolę należy przypisać:
AmazonCognitoDeveloperAuthenticatedIdentities AmazonDynamoDBFullAccess (jeśli chcesz Logowanie & systemu rejestru) AmazonDynamoDBReadOnlyAccess (jeśli chcą tylko logowanie)
- 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"
}
}
}]
}
teraz uczynić swoją rolę AUTHENTICATED
i przypisać:
AmazonCognitoPowerUser AmazonDynamoDBFullAccess AmazonSNSFullAccess - na przykład, cokolwiek jeszcze chcesz
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"
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
Teraz, gdy już wszystko skonfigurować, uruchomić Xcode formę projektu mobilnego Hub
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
skonfigurować stronę logowania
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.
- 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;
}
}
}
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