为什么我们需要客户端ID和客户端秘密而不仅仅是clientSecret?

时间:2015-11-06 00:09:46

标签: oauth

我一直在努力了解OAuth2的工作原理。起初我认为花一个额外的步骤来交换访问令牌的auth代码+客户端秘密是多余的 - 为什么不直接拥有服务器返回访问令牌。为此,我找到了this explanation

然后让我困惑的是,为什么它需要clientId和客户端秘密,而不仅仅是一个秘密?一个可以宣告和证明自己的秘密。然后,客户端应用程序可以在将用户授权自己访问服务器资源时将其传递给服务器。

谢谢!

3 个答案:

答案 0 :(得分:0)

客户端ID在令牌舞的第一部分发送,以识别客户端。此ID在URL中以不安全的方式发送。即使在此请求的authz服务器端,也可能以不安全的方式公开id,其中authz服务器将用户代理重定向到授权页面。因此,客户端ID并不意味着是安全的,只是为了识别客户端。

只有在收到授权代码后(在用户授权之后),客户端然后才需要以更安全的方式获取访问令牌。这是通过TLS使用客户端密钥的地方。

答案 1 :(得分:0)

想象一下,客户端使用秘密签署请求并仅发送签名。服务器如何知道要使用哪个秘密?据推测,服务器支持多个消费者。

答案 2 :(得分:0)

您可以让服务器直接返回访问令牌。您需要请求隐式授权(response_type,其值为token而不是code。)

授权服务器直接返回访问令牌。

此类授权旨在用于无法保持客户端机密或客户端ID的基于用户代理的客户端(例如,单页Web应用程序),因为所有应用程序代码和存储都可以轻松访问。如果您的客户端可以保密,建议您使用更安全的授权类型。