Mar*_*son 7 authentication oauth access-token google-oauth google-signin
我已成功实施Google登录.
我能够对用户进行身份验证,并在回复时收到令牌.但令牌在1小时后到期.
expires_in: "3600"
我尝试在文档中搜索 - https://developers.google.com/identity/sign-in/web/reference - 但找不到参数来延长令牌的生命周期.
https://developers.google.com/identity/sign-in/web/backend-auth
用户成功登录后,使用HTTPS将用户的ID令牌发送到您的服务器
我正在向服务器发送每个请求的令牌:
endpoint/get?access_token=" + access_token
然后在我正在呼叫的服务器上 https://www.googleapis.com/oauth2/v3/tokeninfo
所以我有一个令牌,每个请求都经过身份验证,但在工作1小时后,该tokeninfo方法返回false,我需要重新验证用户身份.
在我的代码中,我通过存储所有历史记录来规避,access_tokens如果客户端使用旧令牌,我会检查历史数据并手动发出新令牌refresh_token (我的一个权限是授予离线访问权限)
是的,我很想知道:
access_token?要么
Pri*_*ner 11
正如@DaImTo所指出的那样,你无法延长access_token的生命周期.您可以使用refresh_token获取一个新的,但通常如果您尝试执行此客户端并拥有服务器,则应重新考虑您的方法.
听起来你在这里有两个"身份验证" - 客户端对服务器进行身份验证,服务器根据Google服务进行身份验证.现在,服务器应该保留刷新令牌 - 因此它总是可以重新对Google进行身份验证.听起来你正在努力解决在auth_token超时后如何针对服务器验证客户端的问题.
通常,客户端不应将access_token发送到服务器,也不应发送refresh_token.它的作用是在第一次登录时,客户端获得一次性代码(来自Google),并将其交给服务器.服务器使用它来与Google交谈并获取access_token和refresh_token,确认用户已经验证了自己,然后将一些内容(通常是cookie)发送回客户端,说"好的,我已经验证了你.这是你如何保持在剩下的谈话中验证自己."
后来的行动非常标准,与oauth本身无关.然后客户端和服务器一如既往地进行通信 - 根本不交换任何oauth东西,你依靠cookie(或等价物)来保持客户端 - 服务器身份验证.服务器继续使用身份验证令牌和刷新令牌与Google通信.
https://developers.google.com/identity/sign-in/web/server-side-flow我认为目前是最好的指南.或者至少它是我目前能找到的最好的一个.至少它有一个很好的图表.
关键是你要与服务器交换出色的"代码"(我称之为"一次性代码").完成后,服务器会通过Google对您进行身份验证 - 然后它会拥有访问/刷新令牌,您可以与服务器通信而无需传递这些令牌.
访问令牌的寿命很短,只能持续一小时,这不是您可以延长的时间。
您需要做的是获取刷新令牌并获取新的访问令牌。
例子:
您获取从初始请求中获得的refresh_token,并通过HTTP将其发布到:注意:grant_type=refresh_token
https://accounts.google.com/o/oauth2/token
client_id={ClientId}.apps.googleusercontent.com&client_secret={ClientSecret}&refresh_token=1/ffYmfI0sjR54Ft9oupubLzrJhD1hZS5tWQcyAvNECCA&grant_type=refresh_token
回复
{
"access_token" : "ya29.1.AADtN_XK16As2ZHlScqOxGtntIlevNcasMSPwGiE3pe5ANZfrmJTcsI3ZtAjv4sDrPDRnQ",
"token_type" : "Bearer",
"expires_in" : 3600
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4990 次 |
| 最近记录: |