OpenID连接访问令牌以验证我自己的REST api

问题描述 投票:0回答:1

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

这是一个简单的问题,但我找不到令人满意的答案。我总是发现一个突出的答案是“当没有后端时使用oidc”。现在,这使我想知道是否创建了不需要后端的Webapp。当在客户端中存储刷新令牌的问题突然出现时,Oidc几乎总是答案(就像在“使用oidc中使用,这是一个更好的体系结构,放弃刷新令牌”),但它并没有真正说明任何问题。

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

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

我又跑了圈。有人可以帮我解决这个问题,请中断循环吗?

oauth-2.0 single-page-application openid openid-connect
1个回答
0
投票

您的SPA(前端)需要向每个API请求添加带有访问令牌的授权标头。前端应实现授权代码流+ PKCE(不再建议使用隐式流)+需要刷新访问令牌。

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

BTW:在浏览器中刷新令牌不是一个好主意,因为刷新令牌等效于您自己的凭据

© www.soinside.com 2019 - 2024. All rights reserved.