如何:使用AWS Cognito的C#.net核心API(APIGateway/Lambda)+ Xamarin + Facebook身份验证

Eli*_*Eli 5 c# facebook amazon-web-services xamarin amazon-cognito

我有一个.NET Core API(带有EF 1.0的.NET Core 1.0.0),我通过在Amazon AWS中将其作为Lambda以无服务器方式使用.

该API功能齐全,但我想在其上实现身份验证.主要是我的Xamarin移动应用程序将使用该restful API.亚马逊有一种称为亚马逊Cognito的东西,您可以使用"Cognito Federated Identities"通过Facebook,Google等登录.

我不知道从哪里开始.我已经清理了互联网,可以在这里和那里找到点点滴滴的代码和文章,但我无法弄清楚如何将它们放在一起.

如果我在API上实施AWS Cognito身份验证,是否还需要API密钥?或者我应该同时使用两者?API密钥,用于将我的手机作为系统的有效用户和AWS Cognito进行身份验证,以便对我的用户进行身份验证?

我假设AWS身份验证是从某种类型的AWS SDK发生的,我仍然可以从Facebook身份验证中受益吗?例如,我可以获得用户图片/专辑/喜欢/等.或者我必须使用Facebook SDK,如果是这样,我在API级别或移动应用程序(Xamarin)级别使用Facebook SDK?

如果有人曾经实现过这样的(或者类似的)可能会给我提供一些示例代码,那会很棒吗?或者至少有些东西可以让我朝着正确的方向前进,因为我有点失落.谢谢!

Eli*_*Eli 0

我还没有时间实现它,但是当我实现时,我也会在这里发布代码。太糟糕了,我失去了 50 名赏金代表:(

如果我在 api 上实施 AWS Cognito 身份验证,还需要 API 密钥吗?或者我应该同时使用两者?用于将我的手机验证为系统有效用户的 API 密钥以及用于验证我的用户身份的 AWS Cognito?或者我会收到某种令牌吗?

使用 Cognito 联合身份将生成与 IAM 角色绑定的 IAM 凭证(访问密钥、秘密密钥、会话令牌),因此这意味着您必须在 API 网关上使用 IAM 身份验证。

您不能在同一 API 方法上使用多种身份验证类型。

我假设 AWS 身份验证通过 AWS SDK 进行,我仍然可以从 facebook 身份验证中受益吗?例如,我可以获得用户的图片/相册/喜欢/等。或者我是否必须为此使用 Facebook SDK,如果是的话,我是否在 API 级别或移动应用程序 (xamarin) 级别使用 facebook SDK

是的,您仍然可以从 Facebook 身份验证中受益。您必须使用 Facebook SDK。AWS SDK 和 Cognito 只是使用 Facebook 来验证用户是否正确。至于您将在何处使用 Facebook SDK,这将取决于您自己的应用程序架构。尽管根据我的经验,我发现它更多地在客户端(移动)级别使用。

为了实际使用和编码 Cognito,首先您需要创建一个身份池。创建池时,根据您的用例,您可以不选中“启用对未经身份验证的身份的访问”。
仅当您希望应用程序中的来宾用户能够使用您的 API 时才会这样做。但如果您只想要通过 Facebook 登录的用户,那么应该取消选中此选项。

然后在“身份验证提供商”下的 Facebook 选项卡下添加您的 Facebook 应用程序 ID。以下是有关如何创建附加信息池的文档: http://docs.aws.amazon.com/cognito/latest/developerguide/getting-started-with-identity-pools.html#create-identity-pool

然后,为了在您的应用程序中进行编码,这两个文档将一起使用。

1) 您首先需要设置凭证对象,然后一旦您通过 Facebook 登录并获取令牌,您就可以创建 addLogin 将令牌添加到 Cognito。

2) 然后使用凭证对象将凭证传递给 API 网关。

http://docs.aws.amazon.com/cognito/latest/developerguide/getting-credentials.html#getting-credentials-1.xamarin http://docs.aws.amazon.com/cognito/latest/developerguide/facebook .html

为了将 IAM Auth 与 API Gateway 结合使用,您需要执行称为 SigV4 签名的操作。
由于 API Gateway 没有为 dotNet/C# 生成的 SDK,因此您必须手动执行此操作。

本文档介绍了签名请求示例。这些示例使用 Python 编写,遗憾的是我们没有任何 C# 示例,但它为您提供了完成此操作所需的逻辑。

http://docs.aws.amazon.com/general/latest/gr/sigv4-signed-request-examples.html