如何使用AWS api网关和web api实现自定义身份验证(逻辑)

时间:2016-12-13 05:57:34

标签: asp.net-web-api2 aws-api-gateway identityserver4

我们有一个web api项目(.net),我们计划实施AWS API网关来处理身份验证,缓存,e.t.c。但我们要求限制用户的访问权限,例如从一组ID中,用户可以访问ID子集的数据。现在我们只想在AWS端处理身份验证,但我不知道如何考虑到我们手头的要求,我们如何实现这一目标。

此外,我们是否可以将Identity Server 3与AWS API Gateway集成以进行自定义身份验证。

P.S。在IIS服务器和后端托管的Web Api 2.2是SQL服务器,因此我们仅使用AWS和api网关,我们使用我们的infra进行托管。我们确实有Identity Server 3,但它目前用作另一个应用程序的auth服务器。

1 个答案:

答案 0 :(得分:0)

听起来您在API网关中看到了自定义授权功能。如果Identity Server是可公开寻址的,则可以使用Lambda授权程序功能对其进行身份验证。

假设客户端在标头中发送了一些授权令牌,您的Lambda函数可以获取令牌并使用Identity Server进行身份验证。然后,您应该能够将调用者的访问权限转换为IAM策略。

如果您的API资源设置如下:

/user/{id}/data

您可以通过访问特定的id值来构建授权程序结果:

{
  "principalId": "yyyyyyyy", // The principal user identification associated with the token sent by the client.
  "policyDocument": {
    "Version": "2012-10-17",
    "Statement": [
      {
        "Action": "execute-api:Invoke",
        "Effect": "Allow",
        "Resource": [
          "arn:aws:execute-api:<regionId>:<accountId>:<restApiId>/<stage>/<httpVerb>/user/id-1/data",
          "arn:aws:execute-api:<regionId>:<accountId>:<restApiId>/<stage>/<httpVerb>/user/id-61/data",
          "arn:aws:execute-api:<regionId>:<accountId>:<restApiId>/<stage>/<httpVerb>/user/id-4/data"
        ]
      }
    ]
  },
  "context": {
    "key": "value",
    "numKey": 1,
    "boolKey": true
  }
}