OAuth2在授权步骤

时间:2017-10-18 17:26:45

标签: oauth-2.0 authorization

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

我现在正致力于授权部分,特别是使用授权代码授权类型。在该过程中,我使用以下查询参数将用户发送到授权端点:code,client_id,redirect_uri,scope和state。 (省略client_secret)

我正在处理的问题是我收到错误,说我还需要提供client_secret。

我认为这部分不需要client_secret,不应该在此请求中发送,而是在客户端发送授权代码(以及id& secret)以获取访问令牌时。

所以我的问题是,授权服务器是否需要在授权代码请求中发送客户端密钥是错误的(针对oauth 2协议)?

1 个答案:

答案 0 :(得分:1)

我不是百分之百确定这一点,但我自己做了一些研究,我发现这不是一个真正的问题,不能让客户保密#34;一个秘密。某些事实阻止了恶意能够通过授权规范的唯一可能性:

  

1。客户需要直接从用户获取授权代码,而不是从服务

获取授权代码      

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

     

2。重定向URL使用客户端ID / secret

注册      

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

     

//复制hideaki答案的粘贴

结论

OAuth2指定如果您的应用程序是基于服务器端的应用程序(不同于单页应用程序或移动设备)而无法使其源代码可用,则需要将您的机密通知给请求。但是,如果您无法像在本机移动应用程序中那样控制基本代码,则应该寻找其他解决方案。

参考

OAuth2 Documentation

Bear similar stack question

Simplifying OAuth2