Appsync oidc 与 auth0 作为授权返回未经授权

Posted

技术标签:

【中文标题】Appsync oidc 与 auth0 作为授权返回未经授权【英文标题】:Appsync oidc with auth0 as authorisation returns unauthorised 【发布时间】:2020-09-28 13:41:16 【问题描述】:

cognito user poolsapi keys 一起,我正在尝试将auth0 用作oidcaws appsync。更具体地说,我正在尝试在appsync 架构中使用多个授权指令,但在使用oidc 授权模式和@aws_oidc 指令时不断收到unauhtorised 错误消息。

对于我的默认授权模式,我使用的是cognito user pools,但也配置了API keys的使用。

我现在想在我的架构中使用 @aws_oidc 指令,以便来自 auth0 的用户可以对我的 API 执行操作。我在appsync 设置中配置了OIDC 授权模式,并设置了与auth0 jwt 用于授权auth0 的令牌中的iss 值相同的值作为颁发者URL。

我检查了该令牌是一个RS256 token 并且它也是一个有效的令牌,如果我使用它向auth0 上的/userinfo 发送一个 curl 请求,我可以检索用户的属性。

我的架构中有以下突变,用于创建项目。

type Mutation @aws_oicd @aws_iam
@aws_cognito_user_pools 
    createItem(input: CreateItemInput!): Item
    auth0CreateItem(bearerToken: String!, input: CreateItemInput!): Item @aws_oicd

如果设置并使用@aws_apikey 指令以及@aws_cognito_user_pools 指令,则此突变有效,我可以很好地创建项目。

但是,当我添加 @aws_oidc 指令时,它会返回未授权的有效令牌。

为什么会返回此消息? aws 在令牌不工作的背景下做了什么?我的令牌中是否缺少属性?

这是我的令牌。

token 中的 iss 值与创建授权模式时 appsync 设置中的 issuer url 匹配。

这是使用appsync 控制台执行查询的响应。

【问题讨论】:

【参考方案1】:

真的很简单。

事实证明,AuthTTL 和 Issued At TTL 值也需要存在于令牌中才能使配置正确,并且值需要匹配。

就我而言,我需要做的就是删除 appsync oidc 设置中的这些值。

这可以在文档here 中找到

【讨论】:

以上是关于Appsync oidc 与 auth0 作为授权返回未经授权的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Graphql 架构级别检查 AWS AppSync OIDC 指令的角色或权限

oidc-client-js 针对 Auth0 的 signoutRedirect 不返回结束会话端点

使用 cognito 进行 Appsync graphql 授权

授权与认证OAuth 2.0 和 OIDC 的异同点

通过自定义授权方方法使用 Auth0 授权 AWS APIGateway

OIDC-基于OAuth2的下一代身份认证授权协议