有两种方法可以获取访问令牌。1.使用授权码来交换它1.使用刷新标记刷新它想想吧!2!交换和刷新虽然用词不同,但它们的作用是一样的。这两个操作都需要解析客户端ID和客户端密码(或签名)以及令牌我们可以将授权代码保存在系统中,然后再次使用授权代码来刷新访问令牌,就像刷新令牌一样。除了授权码过期太快。所以我想知道为什么oauth2的设计者设计了这两个概念,而不是只使用一个概念,或者说只设计授权代码并给予它一个长的过期时间。
rqcrx0a61#
恐怕您还没有很好地理解oauth2的概念。获取访问令牌的方法不止两种,还有更多。每种方法基本上都被称为“授权类型”。我将在下面描述我部署的方法的用例:1-授权码:这类似于您在不同网站上看到的“登录Facebook”等按钮的流程,这些按钮允许您使用您的Facebook等帐户进行注册/登录。在这里,单击此按钮时,控制将被定向到Facebook,用户在其中输入其登录凭据。如果成功,授权码将发送到您在Facebook注册为开发人员时输入的任何重定向地址。然后使用此授权代码请求访问令牌服务以获取访问令牌,然后在访问任何Facebook Web服务时使用该令牌来获取用户的详细信息。2-客户端凭据:如果您正在运行自己的Web服务,并且希望仅允许有效客户端访问,则这是您将使用的授权类型。例如,您正在运行Web服务,现在希望在您自己的本机移动的应用程序中使用它,您可以通过任何应用程序商店分发该应用程序。这将确保只有安装了您的应用程序的用户才能访问您的Web服务。3-使用者认证:与上面相同,只有在这种情况下,这将允许您验证注册用户,以及然后给予访问用户限制服务,如我的帐户等。4-刷新令牌:根据设计,访问令牌服务提供访问令牌和刷新令牌。您可以在此处使用从中获得的刷新令牌来刷新过期的访问令牌。实际上,这不会生成新的访问令牌,它只“刷新”现有令牌。它将提供新的访问令牌和刷新令牌,并延长过期时间。当此访问令牌过期时,使用上次获得的刷新令牌再次调用刷新令牌,并在每次令牌过期时重复该过程。
rkttyhzu2#
根据RFC 6749 10.5授权码是短期和一次性的,因此,您不能反复使用它们来获取新的授权令牌。授权码必须是短期的和一次性的。如果授权服务器发现多次尝试交换一个授权码的访问令牌,授权服务器应该尝试撤销所有已经授予的访问令牌的基础上妥协的授权码。
pgx2nnw83#
还有一些额外的误解,似乎在这里提出,所以我想帮助澄清他们。访问令牌和刷新令牌之间的区别可以总结如下:
*访问令牌用于在进行身份验证后向授权客户端提供对受限资源的访问。
授权代码授予和隐式授予之间的不同(以及它们的用法)有助于说明应如何使用两者。一般来说,授权代码授权应该优先于隐式授权,除非通过公开实现的客户端(例如,浏览器运行代码)直接访问资源,或者有特定原因无法使用授权代码授权(例如,可行性或性能)。这在RFC隐式流定义中进行了解释。在隐式授予期间,访问令牌会暴露给用户代理,这可能会导致它们受到损害,因为它们不再受服务器应用程序的控制(机密客户端),否则可能会请求受保护的资源。这就是在“隐式赠款”期间不颁发刷新令牌的原因。虽然访问令牌可能会公开,但它们的寿命很短。另一方面,资源令牌并且可以用于检索新的访问令牌。另一方面,“授权代码授予”防止刷新标记暴露的可能性。在此授予期间,授权服务器发出一个代码而不是令牌,然后用户代理将代码传递给客户端应用,客户端应用与授权服务器交换代码以检索访问和刷新令牌。由于代码交换直接在客户端应用程序和可信授权服务器之间执行,因此可以安全地发布刷新令牌。RFC规范警告说,在公共客户端和机密客户端中实现授权代码授予的安全性影响“More OAuth 2.0 Surprises: The Refresh Token“澄清了一些误解,并进一步提出了这样的想法,即AUTH代码不应该由用户代理直接发送到AUTH服务器以便检索刷新令牌,尽管OAuth2.0规范在技术上没有规定这一点。
sdnqo3pr4#
来自@ComfortableDust的回答已经回答了最初的问题。只是引用了他回复的确切文本另一方面,“授权代码授予”防止刷新标记暴露的可能性。在此授予期间,授权服务器发出一个代码而不是令牌,然后用户代理将代码传递给客户端应用,客户端应用与授权服务器交换代码以检索访问和刷新令牌。由于代码交换直接在客户端应用程序和可信授权服务器之间执行,因此可以安全地发布刷新令牌。
4条答案
按热度按时间rqcrx0a61#
恐怕您还没有很好地理解oauth2的概念。获取访问令牌的方法不止两种,还有更多。每种方法基本上都被称为“授权类型”。我将在下面描述我部署的方法的用例:
1-授权码:这类似于您在不同网站上看到的“登录Facebook”等按钮的流程,这些按钮允许您使用您的Facebook等帐户进行注册/登录。在这里,单击此按钮时,控制将被定向到Facebook,用户在其中输入其登录凭据。如果成功,授权码将发送到您在Facebook注册为开发人员时输入的任何重定向地址。然后使用此授权代码请求访问令牌服务以获取访问令牌,然后在访问任何Facebook Web服务时使用该令牌来获取用户的详细信息。
2-客户端凭据:如果您正在运行自己的Web服务,并且希望仅允许有效客户端访问,则这是您将使用的授权类型。例如,您正在运行Web服务,现在希望在您自己的本机移动的应用程序中使用它,您可以通过任何应用程序商店分发该应用程序。这将确保只有安装了您的应用程序的用户才能访问您的Web服务。
3-使用者认证:与上面相同,只有在这种情况下,这将允许您验证注册用户,以及然后给予访问用户限制服务,如我的帐户等。
4-刷新令牌:根据设计,访问令牌服务提供访问令牌和刷新令牌。您可以在此处使用从中获得的刷新令牌来刷新过期的访问令牌。实际上,这不会生成新的访问令牌,它只“刷新”现有令牌。它将提供新的访问令牌和刷新令牌,并延长过期时间。当此访问令牌过期时,使用上次获得的刷新令牌再次调用刷新令牌,并在每次令牌过期时重复该过程。
rkttyhzu2#
根据RFC 6749 10.5授权码是短期和一次性的,因此,您不能反复使用它们来获取新的授权令牌。
授权码必须是短期的和一次性的。如果授权服务器发现多次尝试交换一个授权码的访问令牌,授权服务器应该尝试撤销所有已经授予的访问令牌的基础上妥协的授权码。
pgx2nnw83#
还有一些额外的误解,似乎在这里提出,所以我想帮助澄清他们。
访问令牌和刷新令牌之间的区别可以总结如下:
*访问令牌用于在进行身份验证后向授权客户端提供对受限资源的访问。
授权代码授予和隐式授予之间的不同(以及它们的用法)有助于说明应如何使用两者。
一般来说,授权代码授权应该优先于隐式授权,除非通过公开实现的客户端(例如,浏览器运行代码)直接访问资源,或者有特定原因无法使用授权代码授权(例如,可行性或性能)。这在RFC隐式流定义中进行了解释。
在隐式授予期间,访问令牌会暴露给用户代理,这可能会导致它们受到损害,因为它们不再受服务器应用程序的控制(机密客户端),否则可能会请求受保护的资源。这就是在“隐式赠款”期间不颁发刷新令牌的原因。虽然访问令牌可能会公开,但它们的寿命很短。另一方面,资源令牌并且可以用于检索新的访问令牌。
另一方面,“授权代码授予”防止刷新标记暴露的可能性。在此授予期间,授权服务器发出一个代码而不是令牌,然后用户代理将代码传递给客户端应用,客户端应用与授权服务器交换代码以检索访问和刷新令牌。由于代码交换直接在客户端应用程序和可信授权服务器之间执行,因此可以安全地发布刷新令牌。
RFC规范警告说,在公共客户端和机密客户端中实现授权代码授予的安全性影响“More OAuth 2.0 Surprises: The Refresh Token“澄清了一些误解,并进一步提出了这样的想法,即AUTH代码不应该由用户代理直接发送到AUTH服务器以便检索刷新令牌,尽管OAuth2.0规范在技术上没有规定这一点。
sdnqo3pr4#
来自@ComfortableDust的回答已经回答了最初的问题。只是引用了他回复的确切文本
另一方面,“授权代码授予”防止刷新标记暴露的可能性。在此授予期间,授权服务器发出一个代码而不是令牌,然后用户代理将代码传递给客户端应用,客户端应用与授权服务器交换代码以检索访问和刷新令牌。由于代码交换直接在客户端应用程序和可信授权服务器之间执行,因此可以安全地发布刷新令牌。