代码之家  ›  专栏  ›  技术社区  ›  Saurabh Tiwari

无法使用AWS Cognito中的profile/openid作用域获取用户属性

  •  0
  • Saurabh Tiwari  · 技术社区  · 3 年前

    我正在为我的一个web应用程序使用Cognito和ADFS集成。在集成之后,我从Cognito正确地获得了标记。然而,当我尝试使用 Auth.userAttributes() ,我得到一个400错误代码,错误如下:

    {_类型:“NotAuthorizedException”,消息:“访问令牌不存在” have required scopes“}消息:“访问令牌没有required “范围” __类型:“NotAuthorizedException”

    我在jwt上解码了收到的访问令牌。io,并且它正确地具有openid和概要文件范围

    “范围”:“openid配置文件电子邮件”

    附言:我试着向你索要代币 aws.cognito.signin.user.admin 范围,这似乎使得用户属性调用没有错误。然而,为什么需要这样做。我不想向用户公开任何访问令牌来修改任何信息

    0 回复  |  直到 3 年前
        1
  •  0
  •   Gary Archer    3 年前

    根据我自己使用Cognito访问令牌的经验,您无法向它们添加自定义声明。这有一些优点和缺点:

    赞成的意见

    • 网络和移动应用程序使用的令牌不会泄露敏感数据

    欺骗

    • 令牌本身不能使API正确地进行授权

    不过,您可以通过向用户信息端点发送访问令牌来获得所需的详细信息。当首次收到访问令牌时,可以这样做,然后使用相同的访问令牌缓存未来请求的自定义声明:

    您可以按照上面的自述运行上述代码示例。API安全代码的要点是形成一个有用的声明主体,API可以将其用于业务授权。

        2
  •  0
  •   Adbullah Al Mamun    3 年前

    我相信您正在使用aws amplify完成此任务。

    当您使用联邦登录对用户进行身份验证时,您将通过以下方式获得用户属性:

    const user = await Auth.currentAuthenticatedUser();
    const {yourAttributeName} = user.signInUserSession.idToken.payload;

    虽然您没有为此任务使用cognito user pool user,但您可以通过以下方式访问其用户属性:

    const {yourAttributeName} = (await Auth.currentAuthenticatedUser()).attributes;

    如果上述解决方案不起作用,请确保在userpool应用程序中正确设置了您的作用域,并且Identity Provider具有正确的属性映射设置,并且对您希望读取的属性具有读写权限。