介绍
DigitalOcean API 的第 2 版包括许多改善每个人体验的更改。 最重要的新功能之一是针对用户和应用程序的 OAuth 身份验证。
OAuth 系统允许您使用 API 对您的帐户进行身份验证。 这种访问可以以个人访问令牌的形式授予直接用例,但它也允许灵活地允许应用程序访问您的帐户。
在本指南中,我们将讨论如何授予或撤销应用程序访问您帐户的能力。 我们还将通过介绍如何使用 DigitalOcean 注册利用 API 的应用程序来讨论交互的另一面。 这将允许您使用 OAuth 请求访问您的用户帐户。
授权应用程序以用户身份使用您的帐户
如果您只是对让应用程序访问您的帐户感兴趣,您将能够通过应用程序授予授权并通过 DigitalOcean 控制面板撤销访问权限。
当使用使用 DigitalOcean 的 OAuth 身份验证的应用程序时,您将被重定向到一个页面,以选择是否要授予应用程序访问您的 DigitalOcean 帐户的权限。
该页面将如下所示:
该请求将定义应用程序是请求只读访问还是读写访问。 如果您决定授予请求的访问权限,您将返回到应用程序,该应用程序现在将进行身份验证以对您的帐户进行操作。
如果您想撤销访问权限,只需转到您的 DigitalOcean 帐户并单击“ 应用程序和 API ” 控制面板左侧导航菜单中的部分:
在“授权的应用程序”部分下,您应该会看到您已授予访问权限的每个应用程序的条目。
单击“撤消”按钮以删除关联应用程序对您帐户的访问权限:
该应用程序将无法再访问您的帐户。
使用 OAuth 作为开发人员对用户进行身份验证
要将 OAuth 作为开发人员使用,您需要经历两个单独的过程。 首先,您必须注册您的应用程序以获得请求访问所需的凭据。 之后,您必须开发应用程序以正确发出请求并处理来自用户浏览器和 DigitalOcean 服务器的响应。
向 DigitalOcean 注册开发人员应用程序
如果您是需要通过 OAuth 对用户进行身份验证的开发人员,您首先需要通过 DigitalOcean 控制面板注册您的应用程序。
在里面 ” 应用程序和 API ”部分,在页面中间,您将看到一个标题为“开发人员应用程序”的部分:
要注册新应用程序,请单击右侧的“注册新应用程序按钮”:
您将被带到注册页面。
在这里,您需要提供一些基本信息,例如应用程序的名称和主页,并提供简要说明。 请记住,此信息将显示在用户的授权请求页面上。
您还需要为应用程序提供回调 URL。 这是您将配置应用程序以处理授权响应的位置。 请参阅下一部分或 OAuth 身份验证 指南,以了解有关处理 OAuth 请求所需的更多信息。
当您提交详细信息时,您将被带到一个页面,其中包含构建授权应用程序或脚本所需的信息,该应用程序或脚本将位于您提供的回调 URL 中。 这包括您的客户端 ID、您的客户端密码和一个预先格式化的授权请求链接,用于将用户重定向到:
在您的应用程序中实施 DigitalOcean OAuth
要实现 OAuth 身份验证,您的应用程序必须首先将您的用户重定向到以下端点:
https://cloud.digitalocean.com/v1/oauth/authorize
此重定向应包含您的客户端 ID、作为 redirect_uri
值的回调 URL,并设置 response_type=code
。 您可以选择设置您请求的令牌范围(例如 scope=read%20write
用于完全访问)。 重定向示例可能如下所示:
https://cloud.digitalocean.com/v1/oauth/authorize?client_id=client_id&redirect_uri=callback_URL&response_type=code&scope=read%20write
当用户在授予访问权限后被重定向到您提供的回调 URL 时,您需要捕获的代码将作为查询参数包含在内。
接下来,发送一个 POST 请求到:
https://cloud.digitalocean.com/v1/oauth/token
包括您的客户端 ID、客户端密码、作为 redirect_uri
值的回调 URL、您从用户重定向收到的代码,并设置 grant_type=authorization_code
。 示例请求可能如下所示:
https://cloud.digitalocean.com/v1/oauth/token?client_id=client_id&client_secret=client_secret&code=code_from_user_redirect&grant_type=authorization_code&redirect_uri=callback_URL
整个响应将如下所示:
{"provider"=>:digitalocean, "info"=>{"name"=>"some_name", "email"=>"user@example.com"}, "credentials"=>{"token"=>"$AUTH_TOKEN", "expires_at"=>1405443515, "expires"=>true}, "extra"=>{}}
然后,您可以在后续请求中使用 AUTH_TOKEN
对用户帐户执行操作。
大多数开发人员将利用 OAuth 库作为他们选择的语言来简化此过程,但对幕后发生的事情有一个大致的了解总是好的。
接受范围
范围允许您指定所需的访问类型。 范围限制对 OAuth 令牌的访问。 以下是 DigitalOcean OAuth 端点接受的范围列表:
姓名 | 描述 |
---|---|
(没有范围) | 默认为 读取 范围。 |
读 | 授予对用户帐户的只读访问权限。 这允许可以使用 GET 和 HEAD 方法请求的操作。 |
读写 | 授予对用户帐户的读/写访问权限,即 完全访问。 除了 read 范围允许的操作之外,这还允许使用 DELETE、PUT 和 POST 方法请求的操作。 |
开发者资源
omniauth-digitalocean 宝石
由于 DigitalOcean 在内部使用 Ruby,我们提供了一个开源 OAuth 策略供社区使用。 omniauth-digitalocean gem 在 Github 上并发布到 RubyGems。 它基于 OmniAuth,广泛使用的基于 Rack 的多提供商身份验证库,是一种将“使用 DigitalOcean 登录”集成到 Rails 和 Rack 框架的简单方法。
结论
OAuth 是一种成熟的方式,可以授予应用程序访问您的帐户或请求用户访问帐户的权限。 DigitalOcean 的“应用程序和 API”页面努力使这一过程对双方都尽可能简单。
有关 DigitalOcean 的 OAuth API 的技术概述,请单击此处:DigitalOcean OAuth 概述。
要了解有关 OAuth 工作原理的更多信息,请查看我们的社区文章:OAuth 2 简介 。