我们有一个要求,我们的用户希望与各种Google API进行交互,因此我们需要针对Google授权服务器的OAuth2.0授权。
我们的限制是,我们使用的是一个单一的网页前端,不想为了获得用户授权而重定向离开我们的页面。
在理想的情况下,用户会在我们的网页上选中一个框或单击一个按钮,然后使用此输入,我们将接收访问令牌和刷新令牌,而无需用户直接与谷歌交互。这样的想法是否可能,或者是某种形式的用户交互,在最初的步骤中是必须的。
我们已经阅读了一些关于使用Oauth2.0和OpenConnectId进行搭载的参考资料,但我们不确定这种情况的适用性。如有任何建议或意见,将不胜感激
提前感谢
我想您需要OAuth2的Refresh Token流。
OAuth2的刷新令牌:
刷新令牌是一个字符串,表示授予的权限资源所有者的客户端。字符串通常对客户。令牌表示用于检索授权信息。与访问令牌不同,刷新令牌是仅用于授权服务器,从不发送到资源服务器。
+--------+ +---------------+
| |--(A)------- Authorization Grant --------->| |
| | | |
| |<-(B)----------- Access Token -------------| |
| | & Refresh Token | |
| | | |
| | +----------+ | |
| |--(C)---- Access Token ---->| | | |
| | | | | |
| |<-(D)- Protected Resource --| Resource | | Authorization |
| Client | | Server | | Server |
| |--(E)---- Access Token ---->| | | |
| | | | | |
| |<-(F)- Invalid Token Error -| | | |
| | +----------+ | |
| | | |
| |--(G)----------- Refresh Token ----------->| |
| | | |
| |<-(H)----------- Access Token -------------| |
+--------+ & Optional Refresh Token +---------------+
Figure: Refreshing an Expired Access Token
图2中所示的流程包括以下步骤:
(A) 客户端通过使用进行身份验证来请求访问令牌授权服务器并呈现授权授予。
(B) 授权服务器对客户端进行身份验证授权授予,如果有效,则颁发访问令牌以及刷新令牌。
(C) 客户端向资源发出受保护的资源请求服务器。
(D) 资源服务器验证访问令牌,服务于请求。
(E) 重复步骤(C)和(D),直到访问令牌到期。如果客户端知道访问令牌已过期,则跳到步骤(G);否则,它会发出另一个受保护的资源请求。
(F) 由于访问令牌无效,资源服务器返回无效的令牌错误。
(G) 客户端通过使用进行身份验证来请求新的访问令牌授权服务器并呈现刷新令牌。这个客户端身份验证要求基于客户端类型以及授权服务器策略。
(H) 授权服务器对客户端进行身份验证刷新令牌,并且如果有效,则发布新的访问令牌(并且,可选地新的刷新令牌)。
资源参考
根据您的情况,您可能会尝试使用Ajax Call来满足您的需求。