【问题标题】:How to Identify Client uniqueness?如何识别客户唯一性?
【发布时间】:2015-07-11 11:53:57
【问题描述】:

TL;DR;有没有办法将(Bearer?)令牌绑定到唯一的客户端,并在 HTTP REQ 标头中表示?

在用户拥有服务帐户的情况下。同一个用户应该能够使用不同的客户端应用程序(不同的浏览器、本地移动应用程序)来使用服务。最好的方法是,对于每个不同的环境,如果每个应用程序都获取一个令牌(承载令牌),则应该遵循一个登录过程(OAuth2?)。然后每个客户端都可以使用服务,并且通过使用令牌标识它们自己,服务提供者能够确定它们的使用范围。

这在大多数情况下都可以正常工作,尽管当服务提供商希望将每个令牌的使用隔离到特定客户端时会发生什么?

为了确保在安全事件中,提供者可以只删除包含令牌的集合/表,但客户端将其唯一标识符(可能是 md5(concat(app.version, environment.name, username)))的 md5 以及他们的身份验证令牌?

P.S.:我认为在 body 的有效负载中传递这样的值作为属性是无效的。因为这样的身份验证步骤应该在服务器读取 HTTP 标头时发生。

【问题讨论】:

    标签: api rest oauth-2.0 asp.net-web-api api-design


    【解决方案1】:

    客户端由客户端标识符 (client_id) 唯一标识。 client_id 可能会在承载令牌访问验证的结果中返回,并且资源服务器可能会保留黑名单,尽管授权服务器更有可能将其列入黑名单。

    如果您希望通过确保提供令牌的客户端是颁发令牌的实际客户端来提高安全性,这在 OAuth 2.0 的扩展中得到解决,请参阅:http://www.thread-safe.com/2014/04/oauth-proof-of-possession-drafts.html

    这么说吧。对客户的唯一性:通过client_id 确保。写。安全性:任何不包含将令牌绑定到客户端的秘密的提议都不会提高安全性。

    【讨论】:

    • 我明白你的意思,毫无疑问client_id 是这个过程的一部分。是的,客户端唯一性可以被欺骗。我想我可以通过执行md5(concat(app.version, env.name, username, verifier(salt, username, secret))) 来解决这个问题,其中盐将成为客户端身份验证的有效负载的一部分。感谢您的参考!
    猜你喜欢
    • 2022-11-02
    • 2017-02-09
    • 1970-01-01
    • 2023-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-06
    相关资源
    最近更新 更多