OAuth 2:authorization_code授权-是否需要client_secret参数?

时间:2018-07-31 10:32:02

标签: oauth-2.0

关于OAuth 2.0,我以前的理解是 client_secret应该用于授权代码授予,这应该是“更安全的”(此处的一些教程要求使用client_secret {{3 }} 1

但是,在使用authorization_code时,我看到一个2,如果没有提供,我没有兄弟来检查client_secret。这让我想知道client_secret的用法,并更深入地研究OAuth2的规范。

然后,我查看了OAuth 2(library )的RFC,发现对于授权代码授予流程,完全不需要 client_secret

如果向下滚动到authorization_code流https://tools.ietf.org/html/rfc6749#section-4.1所需的参数,您将看到甚至没有提到client_secret

所以我的问题是:

  • 授权码授予类型是否需要 client_secret
  • 如果建议使用client_secret ,而不是必需的,是否会有任何官方文件告诉我们建议使用client_secret

谢谢!

1 个答案:

答案 0 :(得分:1)

这个好问题,也是我对OAuth2.0最讨厌的事情之一-了解围绕公共客户端的安全协议。

我会尽力回答您的问题:-

  

authorization_code授予类型是否需要client_secret?

不。如果客户端是公共客户端,则应允许它使用此授予类型而无需对其自身进行身份验证(前提是它注册了重定向端点)。问题在于,似乎有几种OAuth2.0服务器的实现不允许这种授权类型的公共客户端。

  

如果建议使用client_secret而不是必需的,将   有任何官方文档告诉我们client_secret是   建议吗?

您可能需要查看所使用的实际OAuth2.0提供程序的文档,而不是通用的IETF规范,因为它们可能会在RFC之外围绕公共客户端指定规则。

6749 RFC几乎只是说Auth Server应该处理公共客户端更加不安全的事实,而没有给出具体的操作方法细节。

例如10.1节说:

 The authorization server must consider the security implications of
   interacting with unauthenticated clients and take measures to limit
   the potential exposure of other credentials (e.g., refresh tokens)
   issued to such clients.