OAuth2 - 无需用户交互即可授权

Posted

技术标签:

【中文标题】OAuth2 - 无需用户交互即可授权【英文标题】:OAuth2 - Authorize with no user interaction 【发布时间】:2017-11-04 09:54:08 【问题描述】:

所以我试图通过他们的 API 从外部应用程序访问我自己的数据。 我只需要访问我自己的数据。不尝试从我的任何用户帐户接收数据,因此他们不需要授权任何东西。所以很明显我需要避免任何重定向(这似乎是我研究 OAuth 越多的标准过程......)

进程到达/authorize 端点,该端点返回一个代码。然后在对accesstoken 端点的请求中提供该代码。然后允许我通过 API 访问我的帐户。我有 95% 的把握这个过程是所有 OAuth 的标准,但我想如果不是,我会提供详细信息。

如何在后端提供凭据以获取输入令牌请求的代码,从而否定所有用户交互?我使用的 API 强制我使用 OAuth。

【问题讨论】:

【参考方案1】:

您描述的 oauth2 授权称为 Authorization Code Grant。这种身份验证方式旨在让想要访问用户资源的应用程序可以访问用户凭据。

因此,如果您在此授权中找到了与用户凭据交互的方法,则将被视为黑客攻击。

如果您不希望单个用户输入用户名和密码,但您想使用一种“系统帐户”访问 api,这不是您应该使用的 oauth 授权。

有多种赠款适合您。问题是授权服务器支持哪些并可供您使用。

Resource Owner Password Credentials Grant

此授权类型适用于能够获取资源所有者凭据的客户端。

然而

资源所有者密码凭据授予类型适用于 资源所有者与资源所有者有信任关系的情况 客户端,例如设备操作系统或高权限应用程序。

这种授权类型很可能不可用,因为它可能被滥用来窃取用户凭据。

Client credential grant

客户端可以仅使用其客户端凭据请求访问令牌。

资源如何绑定到客户端不是 oauth 规范的一部分,因此不是特定于提供商的。


如果您想了解更多关于 oauth2 的信息,here 是一篇好文章。

【讨论】:

我都试过了,但我们无法通过 Graph API 使用此流程访问一个驱动器。您将收到 Tenant does not have an SPO license 错误。如果我使用user flow,则该流程中的访问令牌允许我使用一个免下车 API。【参考方案2】:

您所描述的 Oauth 2 授权流程是授权代码授权流程,如上述答案所述。就像他们说的那样,如果您可以选择将上述两种授权之一与该 API 一起使用,那是最简单的解决方案。

但是,如果您不这样做,仍然有一种方法可以避免“用户交互”。不清楚您所说的“用户交互”是什么意思,但在授权代码流程中,这通常意味着登录到调用您尝试进行身份验证的 API 的 Web 应用程序,然后在同意页面上同意。有关示例,请参阅https://dev.fitbit.com/docs/oauth2/#authorization-page(我为 Fitbit 实现了 OAuth 2 :))。您需要使用像 Selenium 这样的自动网络浏览器来单击同意按钮。然后,您可以在 /authorize 的响应中捕获代码并将代码发送到 accesstoken 端点。

【讨论】:

以上是关于OAuth2 - 无需用户交互即可授权的主要内容,如果未能解决你的问题,请参考以下文章

无需用户交互即可自动拍照

Flutter - 无需用户交互即可重建 GestureDetector 小部件

使用PHP无需用户交互即可连接到Google Drive API

无需用户交互即可通过 Api 进行信用卡贷记和借记 / ACH 贷记和借记

Facebook Graph API:有应用访问令牌,需要用户访问令牌而无需交互

Oauth2