OpenId Connect 如何保护资源服务器免受客户端模拟?

How can OpenId Connect protect resource server from client impersonation?

我知道 openId connect 可以发布一个 Id 令牌,它可以被 客户端(依赖方)对最终用户进行身份验证。但是如何使用它来保护资源服务器免受客户端模拟呢? (我觉得这个问题和Client impersonation in OAuth application with implicit authorization很像)

说,有一个SPA(android + webAPI),客户端(android app) 实现了openid connect implicit flow,并且会和resource sever(web api)通信直接使用访问令牌。 该应用程序首先将最终用户重定向到 openid 提供程序,并获得 id 令牌和访问令牌。 然而,有一个恶意应用程序窃取了访问令牌并冒充客户端与资源服务器通信。

没有id token,资源服务器怎么知道access token是否被盗?

我觉得不行。正如您所说,OpenID Connect 是关于向客户端验证最终用户的身份。它没有说明任何有关向资源服务器验证客户端的信息。客户端和资源服务器之间的关系是纯粹的 OAuth2,资源服务器通常能做的就是检查访问令牌是否由授权服务器颁发。 OAuth2 规范的 Section 10.16 还讨论了访问令牌如何被隐式授权滥用。

使用隐式授权不能保证客户端不是恶意的。它甚至没有被授权服务器验证。这不同于授权代码授予,客户端直接向令牌端点进行身份验证。即使那样,使用普通 OAuth2 客户端也不会向资源服务器进行身份验证,因此资源服务器不知道哪个客户端正在发送请求。

OAuth2 省略了访问令牌是如何实现或验证的,因此根据详细信息,资源所有者可能能够从令牌中获取有关哪个客户端请求它的更多信息。但是对于隐式授权,您没有任何保证。

也许我错了,但这不是客户机密的原因吗?恶意应用现在不应该是客户端机密,因此不应该能够向资源服务器发出成功请求。