【发布时间】:2020-10-08 20:33:18
【问题描述】:
我正在使用 Angular 前端和 Java/Spring-Backend 开发应用程序。为了登录我们的后端,我们使用 Oauth2 Authorization Code Flow with PKCE 和 Open ID Connect。
当用户导航到受保护的路由时,他会被重定向到他的 IDP 并且必须登录。之后,他将返回到一个 redirect_uri,其中 authorization_code 作为 URL 参数。到目前为止,一切都清楚了。
现在我不确定用此代码交换 access_token 的最佳方式是什么?到目前为止,我已经在客户端(在 JavaScript 中)完成了这项工作,并将收到的 JWT 用于进一步的后端调用(在后端我只是验证签名),这似乎确实有效。但在其他项目中,我看到同事实际上使用的后端有点像代理。所以他们将授权码发送到 Java 后端,后端进行交换。
现在我读了很多书,但似乎无法理解其中的全部含义。在我看来,让客户端/前端这样做更安全。但另一方面,后端实际上是受信任的,因此在这种情况下我们实际上可以使用 client_secret。
现在的问题是:这两种情况都被认为是安全的吗?或者被认为更安全,如果是这样:为什么?
提前致谢
*编辑:澄清一下——我们实际上并不需要访问另一个资源服务器,用例是我们只想通过我们自己的后端安全地进行身份验证 strong> - 一旦通过身份验证,我们无论如何都会切换到会话 cookie,因此我们根本不会将 access_token 存储在任何地方
【问题讨论】:
标签: oauth-2.0 oauth openid-connect