【问题标题】:OpenID connect access token to authenticate my own REST apiOpenID 连接访问令牌以验证我自己的 REST api
【发布时间】:2019-12-22 04:16:08
【问题描述】:

如果我使用 OpenID connect 进行身份验证,我可以对我的 SPA 进行身份验证。
我现在如何使用获得的访问令牌来访问我自己的 REST 资源?

这是一个简单的问题,但我找不到满意的答案。
我总是找到一个突出的答案是“没有后端时使用 oidc”。
现在这让我想知道是否曾经创建过不需要后端的 web 应用程序。
当弹出在客户端中存储刷新令牌的问题时,Oidc 几乎总是答案(例如在“使用 oidc,它是一个更好的架构并放弃刷新令牌”),但它并没有真正解释任何事情。

因此,当用户使用 Google 等登录时,他会获得一个身份和一个访问令牌(以确保该用户是他声称的那个人)。
那么如何使用它在您自己的 REST 服务上进行身份验证呢?

我认为它是无状态的唯一真正方法是在每次向 REST api 请求时在服务器上向提供者发送另一个请求,以将身份与那里的访问令牌的有效性相匹配。
如果没有,我们将退回到好的 'ol session vs jwt 讨论,这似乎与 oidc 不太相符,因为现在我们正在复制身份验证逻辑。
并且浏览器中好的 'ol 刷新令牌通常被宣传为一个坏主意,尽管您可以将访问令牌保留在浏览器会话存储中(根据 js oidc 客户端库),使用提供程序自动刷新它们,那很好(- .-)。

我又跑圈了。
任何人都可以为我安排这个,请打破循环?

【问题讨论】:

    标签: oauth-2.0 single-page-application openid openid-connect


    【解决方案1】:

    您的 SPA(前端)需要为每个 API 请求添加带有访问令牌的授权标头。前端应该实现授权码流程+PKCE(隐式流程不再推荐)+需要刷新访问令牌。

    您的 API(后端)需要实现 OIDC(或者您可以在后端前面使用“oidc auth”代理) - 它只是验证访问令牌,最终返回 401 (Unauthorized) 用于无效/过期/的请求。 ..令牌。此令牌验证是无状态的,因为它只需要公钥来验证令牌签名 + 当前时间戳。公钥通常在后端从 OIDC 发现 URL 开始时下载,因此不需要在每次后端请求期间重新下载。

    顺便说一句:浏览器中的刷新令牌是个坏主意,因为刷新令牌等同于您自己的凭据

    【讨论】:

    • 感谢您努力回答这个问题!如果我可以在我的 api 网关中验证没有网络请求的 oidc 访问令牌,这可以大大简化这一切。是否有可用的已知资源可用于在我的 NodeJS 后端实现 oidc 验证? (我发现网上很难找到资源)。
    • 我认为这会有所帮助:developers.google.com/identity/sign-in/web/backend-auth 应该足以进行实施。感谢您的帮助!
    • @Trace openid.net/developers/certified 是一个很好的起点,当您正在寻找 OIDC 库时
    猜你喜欢
    • 1970-01-01
    • 2017-12-31
    • 1970-01-01
    • 1970-01-01
    • 2022-11-11
    • 2017-06-17
    • 2018-11-23
    • 2019-11-28
    • 2016-01-01
    相关资源
    最近更新 更多