使用 OAuth 访问令牌访问 SOAP 服务?
我目前正在尝试通过 Chrome 扩展程序访问 Google 服务。我的理解是,对于 JS 应用程序,Google 的首选身份验证机制是 OAuth。我的应用程序目前已成功通过 OAuth 对服务进行身份验证。
查询服务的首选机制是通过 SOAP。然而,SOAP 有它自己的“身份验证令牌”概念,该概念设置在 XML 正文中。根据 Google 文档,我没有可以使用的旧式“ClientLogin”令牌。
如何使用经过 OAuth 身份验证的访问令牌运行 SOAP 查询?或者我应该使用不同的机制来查询或身份验证?
I'm currently trying to access a Google service via a Chrome extension. My understanding is that for JS apps Google's preferred authentication mechanism is OAuth. My app currently successfully authenticates via OAuth to the service.
The preferred mechanism to query the service is via SOAP. However SOAP has it's own 'auth token' concept which is set in the body of the XML. I do not have a old-style 'ClientLogin' token to use per Google's docs.
How can I run SOAP queries using my OAuth-authenticated access token? Or should I be using different mechanism to query or authenticate?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
回答我自己:
通过正常机制对 OAuth 进行身份验证,即在 JS 中:
然后对 SOAP 请求进行身份验证并作为回调运行:
SOAP 标头是所记录内容的较小版本,省略了仅 ClientLogin API 所需的字段。
身体正常。
然后使用适当的方法(JS 中的 oauth.sendSignedRequest)发布此内容,该方法会将所需的 OAuth 字段添加到查询字符串中:
完成。如果您需要手动执行查询而不是使用像 sendSignedRequest 这样的东西,它看起来像:
TLDR:查询字符串中的 OAuth,省略 SOAP 标头中的所有身份验证信息。
Answering myself:
Authenticate to OAuth via the normal mechanism, ie, in JS:
Then authenticate and run your SOAP requests as a callback:
The SOAP header is a smaller version of what's documented, omitting the fields that are only necessary for ClientLogin API.
Body is per normal.
Then POST this using the appropriate method (oauth.sendSignedRequest in JS) that will add the required OAuth fields to the query string:
Done. If you need to do the query manually rather than use sometong like sendSignedRequest, it looks like:
TLDR: OAuth in query string, omit all auth info from SOAP header.