使用 next-auth 时,如何从浏览器调用我的 Cognito 安全 Rest API?
Posted
技术标签:
【中文标题】使用 next-auth 时,如何从浏览器调用我的 Cognito 安全 Rest API?【英文标题】:How do I call my Cognito secured RestAPI from the browser when using next-auth? 【发布时间】:2022-01-19 17:18:30 【问题描述】:我有一个由AWS Cognito
保护的AWS RestApi
。除此之外,我还有一个使用 next-auth 的 NextJS
应用程序,它提供针对 Cognito 用户池的用户身份验证。
我现在想直接从浏览器调用 RestApi,但找不到包含正确凭据的方法。由于我的网络应用程序中存在的唯一 cookie 以 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 调用。将令牌作为值放入授权标头。
【讨论】:
对不起,不是我想要完成的。还是谢谢!以上是关于使用 next-auth 时,如何从浏览器调用我的 Cognito 安全 Rest API?的主要内容,如果未能解决你的问题,请参考以下文章
使用 Next-Auth 进行身份验证时如何修复内部服务器错误