操作方法:使用 AWS Cognito 进行 C# .net 核心 API (APIGateway/Lambda) + Xamarin + Facebook 身份验证
Posted
技术标签:
【中文标题】操作方法:使用 AWS Cognito 进行 C# .net 核心 API (APIGateway/Lambda) + Xamarin + Facebook 身份验证【英文标题】:How To: C# .net core API (APIGateway/Lambda) + Xamarin + Facebook authentication using AWS Cognito 【发布时间】:2017-12-12 08:16:40 【问题描述】:我有一个 .NET Core API(.NET Core 1.0.0 和 EF 1.0),我通过将它作为 Amazon AWS 中的 Lambda 以无服务器方式使用它。
该 API 功能齐全,但我想对其进行身份验证。主要是用于我的 Xamarin 移动应用程序,它将使用那个宁静的 API。 亚马逊有一个叫做 Amazon Cognito 的东西,你可以在其中使用“Cognito Federated Identities”,因此可以通过 Facebook、Google 等登录。
我不知道从哪里开始。我在互联网上搜寻过,到处都可以找到零碎的代码和文章,但我不知道如何将它们放在一起。
如果我在我的 API 上实施 AWS Cognito 身份验证,是否仍然需要 API 密钥?或者我应该两者都用?用于验证我的手机作为系统有效用户的 API 密钥以及用于验证我的用户的 AWS Cognito?
我假设 AWS 身份验证是通过某种 AWS 开发工具包进行的,我还能从 Facebook 身份验证中受益吗?例如,我可以获得用户图片/专辑/喜欢/等。 或者我是否必须为此使用 Facebook SDK,如果需要,我应该在 API 级别或移动应用程序 (Xamarin) 级别使用 Facebook SDK?
如果有人实现了类似(或类似)的东西可以向我提供一些示例代码,那就太好了?或者至少有什么东西可以把我推向正确的方向,因为我有点迷路了。谢谢!
【问题讨论】:
我知道他们有一些用于 xamarin 的 documentation 和 samples 我做了一些快速研究并尝试创建一个示例,但您似乎无法将联合身份直接链接到 api 网关。相反,您需要使用 IAM Auth 并手动签署请求。看看这里:docs.aws.amazon.com/general/latest/gr/… 【参考方案1】:我还没有时间实现它,但是当我这样做时,我也会在这里发布代码。 太糟糕了,我为赏金失去了 50 个代表 :(
如果我在我的 api 上实施 AWS Cognito 身份验证,是否仍然需要 API 密钥?或者我应该两者都用?用于将我的手机验证为系统的有效用户的 API 密钥以及用于验证我的用户的 AWS Cognito? 还是我会收到某种令牌?
使用 Cognito 联合身份将生成与 IAM 角色绑定的 IAM 凭证(访问密钥、秘密密钥、会话令牌),因此这意味着您必须在 API 网关上使用 IAM Auth。
您不能在同一个 API 方法上使用多个身份验证类型。
我假设 AWS 身份验证是通过 AWS SDK 进行的,我还能从 facebook 身份验证中受益吗?例如,我可以获取用户的图片/相册/喜欢/等。或者我是否必须为此使用 Facebook SDK,如果是这样,我应该在 API 级别或移动应用程序 (xamarin) 级别使用 Facebook SDK
是的,您仍然可以从 Facebook 身份验证中受益。您必须使用 Facebook SDK。 AWS 开发工具包和 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
【讨论】:
你实现过这个吗?我想它会回答我的问题,***.com/questions/46065300/…以上是关于操作方法:使用 AWS Cognito 进行 C# .net 核心 API (APIGateway/Lambda) + Xamarin + Facebook 身份验证的主要内容,如果未能解决你的问题,请参考以下文章
有啥方法可以在 AWS Lambda 中获取 Cognito 用户名?