【问题标题】:OAuth2: (Why) does exchanging authorization code for access token require authorization header?OAuth2:(为什么)交换访问令牌的授权码需要授权标头吗?
【发布时间】:2019-06-06 19:20:44
【问题描述】:

我正在阅读 RFC6749 定义 OAuth2 和 section 4.1(关于授权代码授予),它似乎声明当客户端交换访问令牌的授权代码时,请求需要包含 authorization 标头(具体参见第 4.1.3 节)。

  • 是否确实需要所有此类请求,或者我理解它 错了,只需要此类请求的子集?如果是这样的话, 子集是什么?
  • 如果需要,为什么?我以为授权码就足以证明客户端被授权获取token了。

谢谢。

【问题讨论】:

    标签: oauth oauth-2.0


    【解决方案1】:

    答案来自section 2.3 Client Authentication

    如果客户端类型是机密的,客户端和授权服务器建立适合授权服务器安全要求的客户端认证方法。授权服务器可以接受满足其安全要求的任何形式的客户端身份验证。

    通常会颁发(或建立)一组用于向授权服务器进行身份验证的客户端凭据(例如,密码、公钥/私钥对)。

    授权服务器可以与公共客户端建立客户端身份验证方法。但是,授权服务器不得依赖公共客户端身份验证来识别客户端。

    Section 2.1 Client Types

    OAuth 根据其身份验证能力定义了两种客户端类型 安全地与授权服务器(即,维护 客户凭据的机密性):

    机密

    能够为其保密的客户 凭据(例如,在安全服务器上实现的客户端 限制访问客户端凭据),或能够安全 使用其他方式进行客户端身份验证。

    公开

    客户无法为其保密 凭据(例如,在由 资源所有者,例如已安装的本机应用程序或 Web 基于浏览器的应用程序),并且无法提供安全客户端
    通过任何其他方式进行身份验证。

    总结

    授权标头的要求由授权服务器确定,并且是特定于实现的。

    【讨论】:

    • 所以授权标头用于验证客户端(即第 3 方应用程序)而不是资源所有者?顺便说一下,我正在实现授权服务器。我可以决定根本不支持机密客户吗?如果我这样做了,通信中究竟有什么不安全的地方?谢谢!
    • 您可以决定是否实现Authorization 标头。这取决于您的设计。
    • 如果我不实现它,我是否会在资源所有者的安全方面失去任何东西?这是我不明白的。
    • 由于您正在实施授权服务器,因此您决定了安全机制。你有什么松动吗?取决于你的设计。 OAuth 2.0 有点复杂,错误可能会造成漏洞。
    猜你喜欢
    • 2015-06-12
    • 2011-02-22
    • 2018-02-03
    • 2021-11-03
    • 1970-01-01
    • 2015-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多