我对Google Drive API如何工作以及我应该如何将其用于我的用例有疑问。我有一个REST API(基于NodeJS),它在驱动器中上传文档。实际访问驱动器的唯一用户是运行REST API的用户(机器上的根用户)。据我所知,OAuth2协议允许用户允许第三方应用程序访问其信息。所以我不确定我的案子与它是否兼容。我只有一个用户需要一次性权限才能永远可用。
目前,我已经设法使用的驱动器做认证如下:
const { google } = require('googleapis');
const oauth2Client = new google.auth.OAuth2(
CLIENT_ID,
CLIENT_SECRET,
REDIRECT_URI
);
oauth2Client.setCredentials({ refresh_token: REFRESH_TOKEN });
drive_instance = google.drive({
version: 'v3',
auth: oauth2Client,
});
为此,我通过Google Console注册了Google Drive。这里有以下字段:
{
"web": {
"client_id": "CILENT_ID",
"project_id": "project-id",
"auth_uri": "https://accounts.google.com/o/oauth2/auth",
"token_uri": "https://oauth2.googleapis.com/token",
"auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
"client_secret": "CLIENT_SECRET"
"redirect_uris": [
]
}
}
现在,看一下文档,他们建议使用他们的Playground。但有效期为一周。
我想去生产与我的REST API,但我不确定什么REDIRECT_URI
和REFRESH_TOKEN
应该在这种情况下。我想要三个实例:
Dev
- For development.Prod
-用于生产。Test
-集成测试。
我对OAuth2协议如何工作有基本的了解,但我不确定如何创建这三个实例,基于我的用例。基本上,我想保留一个配置文件,每个模式一个,REST API将使用它(基于CLI选项)。谁能解释一下CLIENT_ID
,CLIENT_SECRET
,REDIRECT_URI
,REFRESH_TOKEN
这几个选项的大意?我真的需要"重定向"吗?在每种模式下,即使只有一个用户?
如果您只访问这一个帐户,并且您作为开发人员控制它。那么你应该使用一个服务帐户。
如果您授予服务帐户访问您想要访问的驱动器中的目录的权限,那么它将永远拥有访问权限。
// service account key file from Google Cloud console.
const KEYFILEPATH = 'C:\Youtube\dev\ServiceAccountCred.json';
// Request full drive access.
const SCOPES = ['https://www.googleapis.com/auth/drive'];
// Request full drive scope and profile scope, giving full access to google drive as well as the users basic profile information.
const SCOPES = ['https://www.googleapis.com/auth/drive', 'profile'];
// Create a service account initialize with the service account key file and scope needed
const auth = new google.auth.GoogleAuth({
keyFile: KEYFILEPATH,
scopes: SCOPES
});
代码无耻地从我的教程中撕下来用Node Js上传图片到Google drive
注意你正在使用的web应用。
刷新令牌过期的唯一原因是你的应用程序仍在测试中。如果你把它移到谷歌开发者控制台的oauth同意屏幕下的生产中,刷新令牌将停止过期。
然而,如果你可以使用一个服务帐户,那么真的没有理由使用一个web应用程序。