如何将作用域 API 与 (GSI) Google 身份服务结合使用
How to use scoped APIs with (GSI) Google Identity Services
Google 最近给我发了一封电子邮件,内容如下:
One or more of your web applications uses the legacy Google Sign-In JavaScript library. Please migrate your project(s) to the new Google Identity Services SDK before March 31, 2023
有问题的项目使用 Google 驱动器 API 以及现在的旧版身份验证客户端。
迁移页面 (https://developers.google.com/identity/gsi/web/guides/migration) 上的 table 说:
Old
New
Notes
JavaScript libraries
apis.google.com/js/platform.js
accounts.google.com/gsi/client
Replace old with new.
apis.google.com/js/api.js
accounts.google.com/gsi/client
Replace old with new.
我目前在前端使用 gapi
来执行从 apis.google.com/js/api.js
加载的授权。根据 table 我需要用新库替换它。
我已经尝试过以下方式来验证和授权,就像我以前对 gapi 所做的那样:
window.google.accounts.id.initialize({
client_id: GOOGLE_CLIENT_ID,
callback: console.log,
scope: "https://www.googleapis.com/auth/drive.file",
discoveryDocs: ["https://www.googleapis.com/discovery/v1/apis/drive/v3/rest"],
});
window.google.accounts.id.renderButton(ref.current, {
size: "medium",
type: "standard",
});
但是,当我尝试使用 Google 登录按钮进行身份验证时,scope
字段未被遵守,它不会要求用户授权请求的范围。它也不会 return 在回调的凭据响应中使用任何形式的访问令牌。
我不确定如何授权使用新库。
在新的Google身份服务中,认证时刻和授权时刻是分开的。这意味着 GIS 为网站提供了不同的 API 来调用这两个不同的时刻。您不能再将它们组合在一个 API 调用(和 UX 流程)中。
在身份验证时刻,用户只需登录或注册您的网站(利用 Google 共享的信息)。用户需要做出的唯一决定是他们是否要登录(或注册)。此时无需做出与授权相关的决定。
在身份验证时刻,用户将在所有网站上看到一致的一次点击或按钮 UX(因为隐式请求了相同的范围)。一致性导致更流畅的用户体验,这可能会进一步导致更多的使用。通过一致且优化的身份验证 UX(跨所有网站),用户将获得更好的联合登录体验。
用户登录后,当你真的想从Google数据服务加载一些数据时,你可以调用GIS授权API触发用户体验流程,让最终用户授予许可。这就是授权时刻。
目前(2021 年 8 月),仅发布了身份验证 API。如果您的网站只关心身份验证,您现在可以迁移到 GIS。如果您还需要授权API,则需要等待进一步通知。
要添加到当前的答案,现在有关于如何授权用户具有额外范围的文档。来自 Using the token model.
首先你需要初始化一个 TokenClient:
const client = google.accounts.oauth2.initTokenClient({
client_id: 'YOUR_GOOGLE_CLIENT_ID',
scope: 'https://www.googleapis.com/auth/calendar.readonly',
callback: (response) => {
...
},
});
然后请求令牌:
client.requestAccessToken();
如果有人对迁移文档中提到的位置感兴趣,this section 的最后一段:
If your use case includes authorization, please read How user authorization works and Migrate to Google Identity Services to make sure your application is using the new and improved APIs.
虽然他们的文章非常详细和好,但我个人觉得他们对我来说有点太多了,所以我只是按照提到的第一篇文章而不关心迁移更简单。
Google 最近给我发了一封电子邮件,内容如下:
One or more of your web applications uses the legacy Google Sign-In JavaScript library. Please migrate your project(s) to the new Google Identity Services SDK before March 31, 2023
有问题的项目使用 Google 驱动器 API 以及现在的旧版身份验证客户端。
迁移页面 (https://developers.google.com/identity/gsi/web/guides/migration) 上的 table 说:
Old | New | Notes |
---|---|---|
JavaScript libraries | ||
apis.google.com/js/platform.js | accounts.google.com/gsi/client | Replace old with new. |
apis.google.com/js/api.js | accounts.google.com/gsi/client | Replace old with new. |
我目前在前端使用 gapi
来执行从 apis.google.com/js/api.js
加载的授权。根据 table 我需要用新库替换它。
我已经尝试过以下方式来验证和授权,就像我以前对 gapi 所做的那样:
window.google.accounts.id.initialize({
client_id: GOOGLE_CLIENT_ID,
callback: console.log,
scope: "https://www.googleapis.com/auth/drive.file",
discoveryDocs: ["https://www.googleapis.com/discovery/v1/apis/drive/v3/rest"],
});
window.google.accounts.id.renderButton(ref.current, {
size: "medium",
type: "standard",
});
但是,当我尝试使用 Google 登录按钮进行身份验证时,scope
字段未被遵守,它不会要求用户授权请求的范围。它也不会 return 在回调的凭据响应中使用任何形式的访问令牌。
我不确定如何授权使用新库。
在新的Google身份服务中,认证时刻和授权时刻是分开的。这意味着 GIS 为网站提供了不同的 API 来调用这两个不同的时刻。您不能再将它们组合在一个 API 调用(和 UX 流程)中。
在身份验证时刻,用户只需登录或注册您的网站(利用 Google 共享的信息)。用户需要做出的唯一决定是他们是否要登录(或注册)。此时无需做出与授权相关的决定。
在身份验证时刻,用户将在所有网站上看到一致的一次点击或按钮 UX(因为隐式请求了相同的范围)。一致性导致更流畅的用户体验,这可能会进一步导致更多的使用。通过一致且优化的身份验证 UX(跨所有网站),用户将获得更好的联合登录体验。
用户登录后,当你真的想从Google数据服务加载一些数据时,你可以调用GIS授权API触发用户体验流程,让最终用户授予许可。这就是授权时刻。
目前(2021 年 8 月),仅发布了身份验证 API。如果您的网站只关心身份验证,您现在可以迁移到 GIS。如果您还需要授权API,则需要等待进一步通知。
要添加到当前的答案,现在有关于如何授权用户具有额外范围的文档。来自 Using the token model.
首先你需要初始化一个 TokenClient:
const client = google.accounts.oauth2.initTokenClient({
client_id: 'YOUR_GOOGLE_CLIENT_ID',
scope: 'https://www.googleapis.com/auth/calendar.readonly',
callback: (response) => {
...
},
});
然后请求令牌:
client.requestAccessToken();
如果有人对迁移文档中提到的位置感兴趣,this section 的最后一段:
If your use case includes authorization, please read How user authorization works and Migrate to Google Identity Services to make sure your application is using the new and improved APIs.
虽然他们的文章非常详细和好,但我个人觉得他们对我来说有点太多了,所以我只是按照提到的第一篇文章而不关心迁移更简单。