好消息是,我通过Javascript访问了official tutorial关于访问Google Drive REST API的工作。但是,代码中使用了client_id
但不 client_secret
。
/**
* Check if current user has authorized this application.
*/
function checkAuth() {
gapi.auth.authorize(
{
'client_id': CLIENT_ID,
'scope': SCOPES.join(' '),
'immediate': true
}, handleAuthResult);
}
在注册应用程序时,我获得了一个从未使用过的client_secret
。是否client_secret
auth_token
请求按照here和here的说明发送client_id
?
正如下面的评论所述,我完全理解client_secret
是公开的,而不是client_secret
。让我感到惊讶的是,尽管没有使用auth_token
获取localhost:8000
,但Google的OAuth 2.0如何运作。不是OAuth 2.0规范强制要求的吗?什么阻止恶意应用冒充合法的应用?
我可以将EventArrived
设置为我的Javascript来源。
答案 0 :(得分:0)
客户端ID和客户端密钥都用于标识您的应用程序。客户端ID是公共信息,可以向用户显示。虽然秘密必须保密,否则任何人都可以有效地使用您的申请凭证。
JavaScript是客户端,因此如果您在页面上查看源代码,则可以看到客户端ID。如果您的代码也包含了秘密,那么他们也会看到它并且能够使用它。
我怀疑这就是我们需要使用JavaScript的原因,它会增加额外的安全层,而不是在JavaScript应用程序中使用秘密。
授权服务器向注册客户端发出客户端 identifier - 表示注册的唯一字符串 客户提供的信息。客户端标识符不是 秘密;它暴露给资源所有者,不得使用 单独进行客户端验证。客户端标识符是唯一的 授权服务器。
英语:Google开发者控制台注册应用程序(客户端),创建一个唯一的字符串来标识该客户端(项目)。客户端ID不是秘密,应该显示给数据的所有者。
4.1. Authorization Code Grant就我所见,客户端secrete不是授权代码交换的必需部分。