【问题标题】:How do I call my Cognito secured RestAPI from the browser when using next-auth?使用 next-auth 时,如何从浏览器调用我的 Cognito 安全 Rest API?
【发布时间】:2022-01-19 17:18:30
【问题描述】:

我有一个由AWS Cognito 保护的AWS RestApi。除此之外,我还有一个使用 next-authNextJS 应用程序,它提供针对 Cognito 用户池的用户身份验证。

我现在想直接从浏览器调用 RestApi,但找不到包含正确凭据的方法。由于我的网络应用程序中存在的唯一 cookie 以 next-auth- 开头,我认为它们不适合该任务。

那么,如何从浏览器访问访问令牌?

【问题讨论】:

    标签: aws-api-gateway amazon-cognito next-auth


    【解决方案1】:

    我最终在 NextAuth 配置中连接了两个回调,如下所示:

    NextAuth({
        providers: [
          CognitoProvider({
            idToken: true,
            issuer,
            clientSecret,
            clientId,
            authorization,
          }),
        ],
        callbacks: {
          session: async function ({ session, token }) {
            return {
              ...session,
              bearerToken: token.bearerToken ?? session.bearerToken,
            };
          },
          async jwt({ token, account }) {
            token.bearerToken = account?.id_token ?? token.bearerToken;
            return token;
          },
        },
      })
    

    来自pages/api/auth/[...nextauth].ts 文件。

    这使得bearerToken 可以通过getSession 调用获得:

    import { getSession } from "next-auth/react";
    
    ...
    
    const { bearerToken } = await getSession();
    

    【讨论】:

      【解决方案2】:

      您可以使用 Postman 之类的应用程序来传递 Authorization 标头。我不确定您的查询是关于获取访问令牌还是关于如何使用访问令牌。

      为了获取访问令牌然后调用您的 REST API,您需要有一个服务器。假设您的服务器的域名为“example.com”。然后,将此服务器名称放入您的 Cognito 用户池应用程序客户端的回调 URL 中。

      用户认证后,Cognito 会将访问令牌发送到“example.com”。然后,您的服务器将有责任使用 Cognito 提供的访问或 ID 令牌正确调用 REST API。

      出于测试目的,您可以在使用 Cognito 进行身份验证后手动获取访问令牌。然后,您可以使用 Postman 等应用程序使用访问令牌对您的 REST API 端点进行 HTTP 调用。将令牌作为值放入授权标头。

      【讨论】:

      • 对不起,不是我想要完成的。还是谢谢!
      猜你喜欢
      • 2018-04-11
      • 1970-01-01
      • 2014-09-22
      • 2017-08-07
      • 2015-05-20
      • 1970-01-01
      • 2021-03-25
      • 2019-09-01
      • 1970-01-01
      相关资源
      最近更新 更多