Authentication 客户端应该使用get或POST获取OAuth 2访问令牌吗?

Authentication 客户端应该使用get或POST获取OAuth 2访问令牌吗?,authentication,https,oauth,authorization,oauth-2.0,Authentication,Https,Oauth,Authorization,Oauth 2.0,OAuth 2.0草案v2-22第3.2节规定: 客户端在创建访问令牌时必须使用HTTP“POST”方法 请求 但是,如果您查看和OAuth2实现,它们会要求客户机发出一个简单的GET请求以请求访问令牌。他们要求客户机在URL中放置客户机id和客户机机密 我正在构建一个OAuth 2服务器,在看到Facebook和Foursquare的实现之后,我强烈考虑打破协议,允许客户端通过GET请求访问令牌。我的站点的通信使用SSL,类似于Facebook和Foursquare 所以我的问题是:有什么好的

OAuth 2.0草案v2-22第3.2节规定:

客户端在创建访问令牌时必须使用HTTP“POST”方法 请求

但是,如果您查看和OAuth2实现,它们会要求客户机发出一个简单的GET请求以请求访问令牌。他们要求客户机在URL中放置客户机id和客户机机密

我正在构建一个OAuth 2服务器,在看到Facebook和Foursquare的实现之后,我强烈考虑打破协议,允许客户端通过GET请求访问令牌。我的站点的通信使用SSL,类似于Facebook和Foursquare


所以我的问题是:有什么好的理由不允许客户端通过HTTPS上的GET方法请求访问令牌吗?

最常见的理由是,您不应该在查询字符串(GET参数)中放置敏感信息,因为Web服务器通常会记录HTTP请求URL。POST数据可以任意长,因此通常不会记录。因此,当您处理诸如client_secret或code之类的内容时(尽管它是一次性使用的),将其传递到POST负载中是有意义的


恕我直言,如果您使用的OAuth 2.0流不需要客户端密码(或者按照建议将其放在HTTP授权头中),我认为允许GET没有问题。

关于服务器日志的观点很好,但对于Oauth2,我们还是在服务器上以明文形式存储客户端id和客户端密钥,所以,如果这些信息在我们的服务器日志中,这真的比我们数据库中已经存在的信息糟糕得多吗?同意-那么大致相同。如果web服务器和OAuth AS都在您的控制之下,那么允许获取IMHO没有什么大不了的。