关闭。这个问题需要更多focused .它目前不接受答案。
想改善这个问题吗?更新问题,使其仅关注一个问题 editing this post .
5年前关闭。
Improve this question
由于 Parse 即将消失,我最初使用他们的 _User 和 PFUser 实现来创建用户身份验证过程。
从那以后,我开始改用亚马逊的 AWS Mobilie Hub。我确实在 Amazon Cognito 系统中注意到它们允许 Google、Facebook、Amazon 凭据提供程序,但我还不想使用它们。
我去看看自定义提供程序的选择。我是否必须使用客户端和服务器端代码创建自己的后端身份验证系统才能正常工作?
有没有像 Parse 那样的简单(但安全)的 iOS 登录过程?
谢谢,任何帮助将不胜感激(在线阅读了很多)。
最佳答案
是的,我一直使用 AWS 自定义身份验证。
Check this out和另一个 answer I posted for custom authentication here
所以步骤是:
和您的真实用户开发者名称 <- 重要部分
AUTHENTICATED
角色和 UNAUTHENTICATED
角色。 UNAUTHENTICATED
角色,分配:AmazonCognitoDeveloperAuthenticatedIdentities
AmazonDynamoDBFullAccess(如果您需要登录和注册系统)
AmazonDynamoDBReadOnlyAccess(如果您只想登录)
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"
}
}
}]
}
AUTHENTICATED
角色,并分配:AmazonCognitoPowerUser
AmazonDynamoDBFullAccess
AmazonSNSFullAccess - 例如,以及您想要的任何其他内容
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"
sts:AssumeRoleWithWebIdentity
AUTHENTICATED ARN
填写所有数据(如果没有,应该填写,因为 Mobile-Hub 对我们很好)和您的 UNATHENTICATED ARN
12B.我真的很喜欢在移动设备上使用 Lambda,因为你真的可以做更多的事情,而且你不太容易出错,而且你有更多的控制权等。
因此,如果您想使用 Lambda 并添加和
Inline Policy
,请返回第 4 步和第 6 步。到 Roles
. IAM -> 角色 -> 你的角色 -> Create Role Policy
并弹出:{
"Version": "2012-10-17",
"Statement": [{
"Sid": "",
"Effect": "Allow",
"Principal": {
"Service": "lambda.amazonaws.com"
},
"Action": "sts:AssumeRole"
}]
}
现在您已经完成了基本设置,请返回 Xcode。
does the user exist, if so do the passwords match
在 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');
}
});
};
在 Xcode 中获取 data.Items 后,调用此 Lambda 函数,发送变量,当它们说“好”时,调用:
credentialsProvider.setLogins({developerAuthenticationProvider.getProviderName(), developerUserIdentifier});
后跟
credentialsProvider.refresh();
上面的那部分应该在您来自 MobileHub 的 Xcode 项目中。
现在,事情变得很奇怪。有很多方法可以做到这一点。 TVM , Cognito Assume Auth, 服务器端等
我总是从
Unauthenticated
重新接受身份验证至 Authenticated
,但是如果你想从 Web 端和移动端获得真正的分析,你必须做很多后端的事情,如果你要为两者做这件事。但是,一旦您拥有经过身份验证的用户,您现在就有了一个经过良好身份验证的用户,可以随时访问您在第 6 步中列出的任何经过身份验证的内容!希望这可以帮助。
更新 --- 这是一种肮脏、不安全但快速的方法。不用于生产。
在 cognito 中,甚至不要创建
Authenticated user role
.给您的 Unauthenticated user role
执行所有操作的所有权限( DynamoDBFullAccess
、 S3FullAccess
、 EC2FullAccess
等)然后在手机中处理您的身份验证 - 根据 DynamoDB 检查用户名和密码,然后如果它返回信息,将变量设置为
TRUE
.这并不安全,因为用户现在可以访问您的所有内容,但它看起来像这样:BOOL loggedIn = FALSE;
if (loggedIn) {
[self loadView];
} else {
[self loadLoginView];
}
- (void) loadLoginView {
DynamoDBCall (username, password) withCompletion () {
if (allGood) {
_loggedIn = TRUE;
}
}
}
关于ios - 为 iOS 创建用户身份验证系统(以前使用 Parse 希望 AWS),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35136637/