我需要与仅支持OAuth2的API进行交互。
问题是,我想编写一个纯粹的服务器端应用程序,它应该每天都没有GUI轮询API。
API使我能够以编程方式获取应用程序令牌,但看起来我需要实现整个GUI流来获取后续访问令牌。这是因为我需要通过应用程序提供商基于Web的登录屏幕登录。
看起来我需要获取该访问令牌,并将其复制为我重新创建它的服务器端凭据。如果它过期或变坏,我将需要通过GUI流程返回以获取我的服务器端访问令牌。
我的理解是否正确,因为这感觉非常笨重?
具体来说:
我可以避免实施链接到应用程序提供商登录表单的过程吗?
在这样做之后,我必须取消访问令牌并将其存储在我的服务器端应用程序中。我似乎无法控制是否会过期?
我可以看到,例如Facebook专门支持服务器端和客户端流程。我想知道我是否会遇到OAuth 2特定实现中的限制?
答案 0 :(得分:3)
我不知道您实际上希望该应用的行为,但有一件事是肯定的 - 您必须输入一次用户凭据。
一旦您进行身份验证和授权(关于自动身份验证的SO有很多未解决的问题),您的应用不仅会获得访问令牌,还会获得刷新令牌。刷新令牌正是您在用例中所需要的。您可以将其存储在服务器端 - 刷新令牌没有到期时间。它一直存在,直到用户明确撤销权限。
对于任何OAuth服务提供商,都有一个令牌交换端点,您可以在其中交换(刷新令牌+访问令牌)对的刷新令牌。因此,在后端(您的服务器),您可以随时点击此端点 - 获取一个短期访问令牌并执行您需要的操作。这样可以节省您每次都遵循GUI流程的所有工作。
请参阅此链接 - https://developers.google.com/accounts/docs/OAuth2WebServer#offline
编辑 - 阅读评论后做了一些更改。您只需要知道如何在应用中使用刷新令牌。
答案 1 :(得分:2)
我发现在这个问题中我问的问题的典型解决方案是使用XAuth。
许多提供商(如Twitter)和我目前正在使用的应用程序支持XAuth,无需基于用户界面的身份验证即可提供简化的流程。