Nextjs 集中授权

Posted

技术标签:

【中文标题】Nextjs 集中授权【英文标题】:Nextjs centralized authorization 【发布时间】:2021-09-08 14:07:12 【问题描述】:

我正在构建一个应用程序,我需要根据来自消费应用程序的“模式”查询参数和 apikey 授权用户。

然后它会向后端发送一个 api 请求并确认用户是否具有授权。还要保证apikey不暴露在外面。

只是想知道我将如何在 Next.js 中处理这个问题?

我正在考虑构建一个本地 api 并获取后端响应,然后从页面调用本地 api。因为这必须发生在不允许 getServerSideProps 的 _app.js(集中式)中,所以我对我的方法有点困惑。

非常感谢您的反馈

【问题讨论】:

我如何解决这个问题是通过 getServerSideProps 调用具有已设置白名单和其他配置的应用程序的后端快速应用程序。由于 getServerSideProps 显然发生在服务器端,APIKEY 或请求没有在浏览器中注册。我希望这发生在 _app 中,但无法解决,因为 _app 中不允许使用 getServerSideProps 【参考方案1】:

Next.js 用于构建客户端应用程序。客户端身份验证的一般经验法则是“不在客户端进行身份验证/授权”。

应用程序必须在客户端代码之外放置授权,因为它可以被任何一方任意修改

来源:https://www.staticapps.org/articles/authentication-and-authorization/

因此,集中式身份验证超出了 Next.js 的范围。它在微服务的范围内(遵循 Jamstack 架构https://jamstack.org/)。

【讨论】:

感谢您的回答 :) 如果该应用程序可以通过互联网免费使用并且无需登录即可访问,该怎么办?那我该如何保护 apikey 和 rest 调用呢? 一种常见的方法是让后端来处理它。 Express.js 可以是一个好的开始。用户将访问 next.js 应用程序,然后将请求传递到后端。另一种方法可能是自定义服务器 (nextjs.org/docs/advanced-features/custom-server)

以上是关于Nextjs 集中授权的主要内容,如果未能解决你的问题,请参考以下文章

Next Js - 如何从需要授权的api中检索数据(通过axios)?

如何从 graphQL apollo 突变或查询上的 cookie 更新授权标头

使用 flask-jwt-extended + ariadne (graphql) + react 设置身份验证/授权

Mongodb副本集认证授权

Mongodb副本集认证授权

如何在 Google bigquery 中为多个动态表创建授权视图?