OAuth概述

GoCD实现OAuth协议来授权第三方应用程序(客户端)访问GoCD服务器上的数据。

什么是OAuth?

OAuth是一个开源规范,用于构建允许第三方应用程序(“客户端”)根据“用户”的请求从另一个应用程序(“提供者”或“资源所有者”)访问受保护资源的框架 “的客户端应用程序。Oauth允许用户只向提供者应用输入他的用户凭证(例如用户名和密码),然后授权客户端应用代表用户查看受保护的资源。

常用术语:

  • 提供者/资源所有者(Provider/Resource Owner) - 承载受保护资源的应用程序。一个例子是使用OAuth作为其所有客户端的协议的Twitter。 在本文档中,GoCD是提供者/资源所有者。
  • 客户端(Client) - 请求代表用户查看资源数据的应用程序。 任何显示推文的Twitter客户端都是这样的一个例子。
  • 用户/最终用户(User/end user) - 启动OAuth流程以允许客户端访问来自提供商的受保护数据的实体。
  • 客户端ID/客户端秘密(Client id/client secret) - 通常,提供商应用程序将维护允许访问其数据的客户端列表。 客户端应用程序可以通过多种方式识别,包括身份证和秘密。

OAuth授权工作流程

有关基本OAuth工作流程的概述,请参见初学者指南.

管理OAuth客户端

创建一个新的OAuth客户端

在任何第三方应用程序可以使用OAuth使用GoCD之前,它需要在Go中注册为OAuth客户端。

  • 以GoCD的管理员身份登录。
  • 导航到管理员页面,然后是OAuth客户端选项卡。
  • 点击New OAuth Client按钮。
  • 为第三方应用程序填写名称重定向URL。重定向URL是Go在授权过程完成后将发送给最终用户的地方。
  • 您将看到新注册申请的摘要。使用第三方应用程序中提供的Client ID和Secret来启用与GoCD的OAuth通信。

编辑现有的OAuth客户端

如果您已经注册了OAuth客户端,但想更改其名称或重定向网址,请按以下步骤操作:

  • 以GoCD的管理员身份登录。
  • 导航到管理员页面,然后是OAuth客户端选项卡。
  • 找到您要修改的客户端,然后点击旁边的编辑链接。
  • 编辑必要的字段并点击更新按钮保存您的更改。

删除现有的OAuth客户端

如果您想取消注册/删除(un-register/delete)OAuth客户端(防止通过OAuth访问GoCD),请执行以下操作:

  • 以GoCD的管理员身份登录。
  • 导航到管理员页面,然后是OAuth客户端选项卡。
  • 找到您要删除的客户端,然后点击旁边的Destroy链接。
  • 在弹出框中确认删除。

请求授权码

您的客户需要使用客户端ID和客户端密钥联系GoCD服务器以获取授权代码。 GoCD验证请求的应用程序是否已经注册。

使用以下查询参数向 https://your-go-server.com:8154/oauth/authorize 发送请求:

Query Parameter Description
client_id (必需)您的应用程序的客户端标识符。
redirect_uri (必填)授予访问服务后用户应重定向到的URL。 这个URI也可以包含url编码的查询参数
response_type (必需)响应的类型。 在这种情况下,应始终是'代码'

示例请求:

https://www.your-go-server.com:8154/oauth/authorize?redirect_uri=http://www.my_redirect_uri.com&client_id=ac212ddea07c6ac009d26de8090f5918f73ae648dc3676b1f00aeeae4fca67e1&response_type=code

如果您在浏览器中输入上述请求,则应该看到一个表单,要求您授权客户端代表您访问主机应用程序。 选中复选框并提交。

您的浏览器被重定向到您的重定向URI,您现在应该将您的授权代码视为“代码”参数。 保存此代码,您将需要它来进行下一步。

响应示例:

http://www.my_redirect_uri.com?code=26a7dea5e7e121be5ad5832a4a5b09d505c234c7625de3f375971264688bdb51

获取访问令牌

对于这一步,您需要使用以下键/值对将表单数据发送到/oauth/token的POST请求:

Form Data Parameter Description
code (必需)这是您从上一步获得的授权代码。
grant_type (必需)应该是这个请求的'授权代码'。
client_id (必需)您的应用程序的客户端标识符。
client_secret (必填)您的应用程序的客户机密。
redirect_uri (必填)授予访问服务后用户应重定向到的URL。 这个URI也可以包含url编码的查询参数

示例请求(in curl) :

curl  https://www.your-go-server:8154/go/oauth/token -d  "code=26a7dea5e7e121be5ad5832a4a5b09d505c234c7625de3f375971264688bdb51&grant_type=authorization-code&client_id=ac212ddea07c6ac009d26de8090f5918f73ae648dc3676b1f00aeeae4fca67e1&client_secret=d1b54df502f162108a6136ec584dc637a7ad5578832a5db364e0d7b47657c718&redirect_uri=www.my_redirect_uri.com" -v

对上述POST请求的响应将是一个包含您的访问令牌的JSON,以及以秒为单位的到期时间

响应示例:

{:access_token => f180f7bb68d38531aac2f49e5b0cac0c5ed5ced9b72842a429e783747e819664, :expires_in => 3529, :refresh_token => e1n54df802f162108a6336ec584dc637a7ad5578832a5db364e0d7b47657c875}

使用访问令牌

现在您已准备好从GoCD服务器查询数据。

示例请求:

curl -H 'Authorization: Token token="f180f7bb68d38531aac2f49e5b0cac0c5ed5ced9b72842a429e783747e819664"' https://www.your-go-server.com:8154/go/cctray.xml

results matching ""

    No results matching ""