OpenID 连接访问令牌以验证我自己的 REST api
OpenID connect access token to authenticate my own REST api
如果我使用 OpenID connect 进行身份验证,我可以对我的 SPA 进行身份验证。
现在如何使用获取到的access token来访问自己的REST资源呢?
这是一个简单的问题,但我没有找到满意的答案。
我总能找到一个突出的答案是“当你没有后端时使用 oidc”。
现在这让我想知道是否曾经创建过不需要后端的网络应用程序。
当弹出在客户端中存储刷新令牌的问题时,Oidc 几乎总是答案(例如“使用 oidc,它是一个更好的体系结构并放弃刷新令牌”),但它并没有真正解释任何东西。
因此,当用户使用 Google 登录时,他会获得一个身份和一个访问令牌(以确保该用户是他声称的那个人)。
那么如何使用它在您自己的 REST 服务中进行身份验证呢?
我认为它是无状态的唯一真实方法是在每次向 REST api 请求时在服务器上向提供者发送另一个请求,以将身份与那里的访问令牌的有效性相匹配。
如果没有,我们回到好的'ol 会话与 jwt 讨论,它似乎不太适合 oidc,因为现在我们正在复制身份验证逻辑。
尽管您可以将访问令牌保留在浏览器会话存储中(根据 js oidc 客户端库),然后使用提供程序自动刷新它们,但浏览器中的良好刷新令牌通常被提升为一个坏主意(- .-).
我又运行圈了
任何人都可以为我解决这个问题,请打破循环?
您的 SPA(前端)需要为每个 API 请求添加一个带有访问令牌的授权 header。前端应该实现授权代码流+ PKCE(不再推荐隐式流)+它需要刷新访问令牌。
您的 API(后端)需要实施 OIDC(或者您可以在后端前面使用 "oidc auth" 代理)- 它只是验证访问令牌,最终 returns 401(Unauthorized
) 对于带有 invalid/expired/... 令牌的请求。此令牌验证是无状态的,因为它只需要 public 个密钥来验证令牌签名 + 当前时间戳。 Public 密钥通常在后端从 OIDC 发现 URL 开始时下载,因此不需要在每次后端请求期间重新下载。
顺便说一句:浏览器中的刷新令牌不是个好主意,因为刷新令牌等同于您自己的凭据
如果我使用 OpenID connect 进行身份验证,我可以对我的 SPA 进行身份验证。
现在如何使用获取到的access token来访问自己的REST资源呢?
这是一个简单的问题,但我没有找到满意的答案。
我总能找到一个突出的答案是“当你没有后端时使用 oidc”。
现在这让我想知道是否曾经创建过不需要后端的网络应用程序。
当弹出在客户端中存储刷新令牌的问题时,Oidc 几乎总是答案(例如“使用 oidc,它是一个更好的体系结构并放弃刷新令牌”),但它并没有真正解释任何东西。
因此,当用户使用 Google 登录时,他会获得一个身份和一个访问令牌(以确保该用户是他声称的那个人)。
那么如何使用它在您自己的 REST 服务中进行身份验证呢?
我认为它是无状态的唯一真实方法是在每次向 REST api 请求时在服务器上向提供者发送另一个请求,以将身份与那里的访问令牌的有效性相匹配。
如果没有,我们回到好的'ol 会话与 jwt 讨论,它似乎不太适合 oidc,因为现在我们正在复制身份验证逻辑。
尽管您可以将访问令牌保留在浏览器会话存储中(根据 js oidc 客户端库),然后使用提供程序自动刷新它们,但浏览器中的良好刷新令牌通常被提升为一个坏主意(- .-).
我又运行圈了
任何人都可以为我解决这个问题,请打破循环?
您的 SPA(前端)需要为每个 API 请求添加一个带有访问令牌的授权 header。前端应该实现授权代码流+ PKCE(不再推荐隐式流)+它需要刷新访问令牌。
您的 API(后端)需要实施 OIDC(或者您可以在后端前面使用 "oidc auth" 代理)- 它只是验证访问令牌,最终 returns 401(Unauthorized
) 对于带有 invalid/expired/... 令牌的请求。此令牌验证是无状态的,因为它只需要 public 个密钥来验证令牌签名 + 当前时间戳。 Public 密钥通常在后端从 OIDC 发现 URL 开始时下载,因此不需要在每次后端请求期间重新下载。
顺便说一句:浏览器中的刷新令牌不是个好主意,因为刷新令牌等同于您自己的凭据