我正在使用OIDC和OAuth 2.0(使用Auth0)构建一个系统,我不确定如何正确使用id_token和access_token.或者更确切地说,我对在我的设置中分配给各种服务的角色感到困惑.
我有一个完全静态的前端应用程序(单页面应用程序,HTML + JS,没有后端),可确保使用针对Auth0的隐式流程对用户进行身份验证.然后,前端应用程序从我正在构建的API中获取数据.
现在,哪个是对的?
...要么:
如果我的前端和后端API都可以被认为是客户端,我认为在id_token我的前端到后端的请求中使用持票令牌没有真正的危害- 这很有吸引力,因为那时我可以简单地验证签名后的令牌后端,我有关于我需要的用户的所有信息.但是,如果我的API被认为是资源服务器,我应该使用它access_token,但是我必须在每个API请求上连接到Auth0的服务器以验证令牌,并获得基本的用户信息,不是吗?
我已经读过这个似乎表明它access_token是我的API使用的唯一有效令牌.但就像我说的那样,我不确定个别服务的角色.并且使用它id_token很诱人,因为它在后端不需要网络连接,并且包含提取正确数据所需的信息.
什么是正确的方法?
我正在尝试从API网关端点代理配置为网站的S3存储桶.我使用控制台成功配置了端点,但我无法使用Cloudformation重新创建配置.
经过大量的试验和错误猜测后,我想出了以下CF堆栈模板,让我非常接近:
Resources:
Api:
Type: 'AWS::ApiGateway::RestApi'
Properties:
Name: ApiDocs
Resource:
Type: 'AWS::ApiGateway::Resource'
Properties:
ParentId: !GetAtt Api.RootResourceId
RestApiId: !Ref Api
PathPart: '{proxy+}'
RootMethod:
Type: 'AWS::ApiGateway::Method'
Properties:
HttpMethod: ANY
ResourceId: !GetAtt Api.RootResourceId
RestApiId: !Ref Api
AuthorizationType: NONE
Integration:
IntegrationHttpMethod: ANY
Type: HTTP_PROXY
Uri: 'http://my-bucket.s3-website-${AWS::Region}.amazonaws.com/'
PassthroughBehavior: WHEN_NO_MATCH
IntegrationResponses:
- StatusCode: 200
ProxyMethod:
Type: 'AWS::ApiGateway::Method'
Properties:
HttpMethod: ANY
ResourceId: !Ref Resource
RestApiId: !Ref Api
AuthorizationType: NONE
RequestParameters:
method.request.path.proxy: true
Integration:
CacheKeyParameters:
- 'method.request.path.proxy'
RequestParameters:
integration.request.path.proxy: 'method.request.path.proxy'
IntegrationHttpMethod: ANY
Type: HTTP_PROXY
Uri: 'http://my-bucket.s3-website-${AWS::Region}.amazonaws.com/{proxy}'
PassthroughBehavior: WHEN_NO_MATCH …Run Code Online (Sandbox Code Playgroud) 我正在编写一些 cloudformation 模板来启动一个包含一些 docker 容器的 ECS 集群。我不完全理解所有端口如何相互关联。
我有一个AWS::ECS::TaskDefinition,它指定一个端口映射,由 a ContainerPort(我理解是容器中运行的进程使用的端口)和 a组成HostPort,我认为这是 EC2 实例上公开的端口。
然后我有一个AWS::ECS::Service,其中有一个LoadBalancers部分。本节ContainerPort再次包含 - 但这与我的任务定义有何关系?这应该是之前的ContainerPort还是那个?HostPort如果是后者,它是如何运作的?AWS 是否对实例进行“反向查找”?例如“获取容器端口 XYZ 的主机端口”?
我有一个terraform模块,主要在eu-west-1中提供资源。我需要ACM证书才能附加到Cloudfront发行版。证书必须在us-east-1中进行设置。
因此,我配置了两个提供程序:
provider "aws" {
version = "~> 1.0"
region = "eu-west-1"
}
provider "aws" {
version = "~> 1.0"
region = "us-east-1"
alias = "us-east-1"
}
Run Code Online (Sandbox Code Playgroud)
在我的模块中,我像这样配置证书:
resource "aws_acm_certificate" "cert" {
provider = "aws.us-east-1"
domain_name = "${var.domain_name}"
validation_method = "DNS"
tags = "${var.tags}"
lifecycle {
create_before_destroy = true
}
}
Run Code Online (Sandbox Code Playgroud)
问题1:我尝试使用以下方法导入现有的ACM证书:
terraform import module.mymod.aws_acm_certificate.cert arn:aws:acm:us-east-1:xyz:certificate/uuid
Run Code Online (Sandbox Code Playgroud)
失败并显示:“找不到ID为证书的证书”。地形是否在错误的区域中寻找?我通过aws CLI确认证书确实存在(例如,ARN中没有错字)。
好的,所以我认为我可以创建新证书。确实可以,并且我现在有两个证书,但是然后遇到了问题2:
resource "aws_route53_record" "cert_validation" {
name = "${aws_acm_certificate.cert.domain_validation_options.0.resource_record_name}"
type = "${aws_acm_certificate.cert.domain_validation_options.0.resource_record_type}"
zone_id = "${data.aws_route53_zone.zone.id}"
records = ["${aws_acm_certificate.cert.domain_validation_options.0.resource_record_value}"]
ttl = 60
} …Run Code Online (Sandbox Code Playgroud)