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

Cha*_*lie 5 security oauth-2.0 openid-connect

我知道openId connect可以发出一个Id令牌,客户端(依赖方)可以使用它来验证最终用户.但它如何用于保护资源服务器免受客户端模拟?(我认为这个问题与使用隐式授权的OAuth应用程序中的客户端模拟非常相似)

比如,有一个SPA(android + webAPI),客户端(android app)实现了openid connect隐式流,并将直接使用访问令牌与资源服务器(web api)进行通信.该应用程序首先将最终用户重定向到openid提供程序,并获得id令牌和访问令牌.但是,有一个恶意应用程序窃取访问令牌并模拟客户端与资源服务器通信.

如果没有id令牌,资源服务器如何知道访问令牌是否被盗?

Sha*_*eep 0

我认为不可以。正如您所说,OpenID Connect 旨在向客户端验证最终用户的身份。它没有说明有关向资源服务器验证客户端的任何内容。客户端和资源服务器之间的关系是纯粹的OAuth2,资源服务器通常所能做的就是检查访问令牌是否由授权服务器颁发。OAuth2 规范的第 10.16 节还讨论了如何通过隐式授权滥用访问令牌。

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

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