如何识别客户的唯一性?
How to Identify Client uniqueness?
TL;DR; 有没有办法将(Bearer?)令牌绑定到唯一的客户端,并在 HTTP REQ Headers 中表示?
在用户拥有服务帐户的情况下。同一用户应该能够使用不同的客户端应用程序(不同的浏览器、本机移动应用程序)使用服务。最好的方法是,对于每个不同的环境,应该遵循登录过程(OAuth2?)每个应用程序获取令牌(承载令牌)。然后每个客户都能够使用服务,并通过使用令牌来识别他们自己,服务提供商能够确定他们的使用范围。
这在大多数情况下工作正常,但当服务提供商想要将每个令牌的使用隔离到特定客户端时会发生什么情况?
可以肯定的是,在安全事件中,提供者可以只删除持有令牌的 collection/table,但对于客户端传递其唯一标识符的 md5(可能是 md5(concat(app.version, environment.name, username))
) 以及他们的授权令牌?
P.S.: 我认为在 body 的有效负载中传递 属性 这样的值是无效的。由于这样的身份验证步骤应该在服务器读取 HTTP headers.
时发生
客户端由客户端标识符 (client_id
) 唯一标识。 client_id
可能会在 Bearer 令牌访问验证的结果中返回,并且资源服务器可能会保留黑名单,尽管授权服务器更有可能将其列入黑名单。
如果您希望通过确保出示令牌的客户端是令牌颁发给的实际客户端来提高安全性,OAuth 2.0 的扩展中正在解决这个问题,请参阅:http://www.thread-safe.com/2014/04/oauth-proof-of-possession-drafts.html
所以wrt。客户端唯一性:通过 client_id
确保。写。安全性:任何不包含将令牌绑定到客户端的秘密的提议都不会提高安全性。
TL;DR; 有没有办法将(Bearer?)令牌绑定到唯一的客户端,并在 HTTP REQ Headers 中表示?
在用户拥有服务帐户的情况下。同一用户应该能够使用不同的客户端应用程序(不同的浏览器、本机移动应用程序)使用服务。最好的方法是,对于每个不同的环境,应该遵循登录过程(OAuth2?)每个应用程序获取令牌(承载令牌)。然后每个客户都能够使用服务,并通过使用令牌来识别他们自己,服务提供商能够确定他们的使用范围。
这在大多数情况下工作正常,但当服务提供商想要将每个令牌的使用隔离到特定客户端时会发生什么情况?
可以肯定的是,在安全事件中,提供者可以只删除持有令牌的 collection/table,但对于客户端传递其唯一标识符的 md5(可能是 md5(concat(app.version, environment.name, username))
) 以及他们的授权令牌?
P.S.: 我认为在 body 的有效负载中传递 属性 这样的值是无效的。由于这样的身份验证步骤应该在服务器读取 HTTP headers.
时发生客户端由客户端标识符 (client_id
) 唯一标识。 client_id
可能会在 Bearer 令牌访问验证的结果中返回,并且资源服务器可能会保留黑名单,尽管授权服务器更有可能将其列入黑名单。
如果您希望通过确保出示令牌的客户端是令牌颁发给的实际客户端来提高安全性,OAuth 2.0 的扩展中正在解决这个问题,请参阅:http://www.thread-safe.com/2014/04/oauth-proof-of-possession-drafts.html
所以wrt。客户端唯一性:通过 client_id
确保。写。安全性:任何不包含将令牌绑定到客户端的秘密的提议都不会提高安全性。