有时需要在访问Web服务时在客户端计算机上设置回调。一个例子是 git-credential-manager,它访问 OAuth 身份提供商(“IdP”,即 Google/GitHub/其他),以授权 git 访问另一台服务器。
为了实现此目的,GCM 会弹出一个浏览器窗口来访问 IdP 登录页面。用户登录后,IdP 会联系客户端上的回调 URL,以告知 GCM 用户是否已获得授权。回调 URL 始终位于本地主机 (http://localhost/whatever
)。问题:这是怎么做到的? IdP 显然无法直接访问
localhost
。 GCM 是否设置了与浏览器窗口对话的本地服务器?浏览器是否安排回调路由到本地服务器,如何安排?
相反,客户端通常只是通过 http 本身或通过 websocket 保持连接处于活动状态,或者只是轮询结果 URL,直到失败或转发到所需的令牌。