Oauth 2.0 OAuth2在授权步骤中发送客户端机密

Oauth 2.0 OAuth2在授权步骤中发送客户端机密,oauth-2.0,authorization,Oauth 2.0,Authorization,我正在构建一个使用Oauth2.0协议的web应用程序。我已经在授权服务器上注册了我的应用程序,并收到了我的客户端id和客户端密码 我现在正在处理授权部分,特别是使用授权代码授权类型。在这个过程中,我使用以下查询参数将用户发送到authorize端点:code、client\u id、redirect\u uri、scope和state。(省略客户的秘密) 我要处理的问题是,我得到了一个错误,我说我需要提供客户的秘密 我的印象是,在这一部分不需要客户端密码,不应该在这个请求中发送,而是在客户端发

我正在构建一个使用Oauth2.0协议的web应用程序。我已经在授权服务器上注册了我的应用程序,并收到了我的客户端id和客户端密码

我现在正在处理授权部分,特别是使用授权代码授权类型。在这个过程中,我使用以下查询参数将用户发送到authorize端点:code、client\u id、redirect\u uri、scope和state。(省略客户的秘密)

我要处理的问题是,我得到了一个错误,我说我需要提供客户的秘密

我的印象是,在这一部分不需要客户端密码,不应该在这个请求中发送,而是在客户端发送授权码(以及id和secret)以获取访问令牌时发送


因此,我的问题是,授权服务器要求在请求授权代码时发送客户机机密,这是否是错误的(与oauth 2协议相反)?

我不是100%确定这一点,但我自己做了一些研究,我发现不保守“客户机机密”不是一个真正的问题。某些事实阻止了恶意用户通过授权规范的唯一可能性:

1.客户端需要直接从用户而不是从服务获取授权代码 即使用户表示他/她信任客户机的服务 客户端无法仅通过显示从服务获取授权代码 客户端id和客户端机密。相反,客户机必须获得 授权代码直接来自用户。(这通常由 URL重定向,我将在后面讨论。)因此,对于恶意 客户端,仅知道用户信任的客户端id/密码是不够的。 它必须以某种方式涉及或欺骗用户,才能授予其授权 代码,这应该比只知道客户端id/密码更难

2.重定向URL已使用客户端id/secret注册 让我们假设恶意客户端以某种方式参与了 用户,并让他/她单击服务上的“授权此应用”按钮 页这将触发从服务到的URL重定向响应 带有授权码的用户浏览器。然后 授权代码将从用户浏览器发送到重定向 URL,并且客户端应该在重定向URL处侦听 接收授权码。(重定向URL可以是localhost 我也认为这是“公共客户”的典型方式 接收授权代码。),因为此重定向URL在 具有客户端id/secret的服务,恶意客户端不会 有一种方法可以控制授权代码的授予位置。这 表示具有您的客户端id/secret的恶意客户端具有另一个 获取用户授权码的障碍

//hideaki答案的复制粘贴

总结 OAuth2指定,如果您的应用程序是基于服务器端的应用程序(不同于单页应用程序或移动应用程序),并且源代码不可用,则需要在请求中通知您的机密。然而,如果您无法控制基本代码,比如在本机移动应用程序中,您应该寻找另一种解决方案

工具书类


我感谢你的回答。根据oauth规范,客户端机密需要在令牌请求(使用服务器端应用程序)中,但它是否需要在授权请求中?如果不包括,则不符合规范。它是可选的还是非可选的,如果不是可选的,包括还是不包括。
client\u secret
不应该在授权请求中,这是一个重定向,因此参数在用户客户端(浏览器)中可见。这是哪个系统?如果是Kong,则Kong的授权端点实际上并不用于浏览器,而是来自授权服务器的自定义实现。