【问题标题】:Greenhouse Job Board API integration: HTTP Basic Auth over SSL/TLSGreenhouse Job Board API 集成:基于 SSL/TLS 的 HTTP 基本身份验证
【发布时间】:2015-08-25 12:22:47
【问题描述】:

我正在使用 Greenhouse API 构建一个工作板,但在通过 SSL/TLS 的 HTTP 基本身份验证的最后一步获取工作申请表数据时有点卡住了。特别是 action="!!REQUEST 必须在您的服务器上代理!!"下面一点。

谁能指出我如何实现这个的正确方向:

描述:/applications 方法接受表示工作申请的多部分表单 POST。此方法需要基于 SSL/TLS 的 HTTP Basic Auth:Basic Auth 用户名是您的 API 密钥(可在 API Credentials 页面上找到),不需要密码。正确表示此方法所需数据的表单将从通过 /job API 方法可用的“问题”数组构造,这组字段是特定于作业的(更多详细信息可在作业方法文档中找到)。

https://api.greenhouse.io/v1/applications/

<!-- 
EXAMPLE FORM BELOW (simplified):

Please keep in mind that the HTTP Basic Auth API token is a secret key.  Any form posts should be proxied by your own servers.  Any direct post to the /applications POST method would reveal your secret key to anybody that views source--which would be a very bad thing.
-->
<form method="POST" action="!!REQUEST MUST BE PROXIED ON YOUR SERVERS!!" enctype='multipart/form-data'>
  <!-- represents the ID of the job -->
  <input type="hidden" name="id" value="55555" />
  <!-- place the value of the gh_src URL parameter in the field below -->
  <input type="hidden" name="mapped_url_token" />
  <label>First Name <input type="text" name="first_name" /></label><br/>
  <label>Last Name <input type="text" name="last_name" /></label><br/>
  <label>Email <input type="text" name="email" /></label><br/>
  <label>Phone <input type="text" name="phone" /></label><br/>
  <label>Resume <input type="file" name="resume" /></label><br/>
  <label>Cover Letter <input type="file" name="cover_letter" /></label><br/>
  <label>LinkedIn Profile <input type="text" name="question_5555" /></label><br/>
  <label>Some dropdown
    <select name="question_3333">
      <option></option>
      <option value="1">Yes</option>
      <option value="0">No</option>
    </select>
  </label><br/>
  <label>Multi select with checkboxes<br/>
    <label><input type="checkbox" name="question_2222[]" value="2" /> Red</label><br/>
    <label><input type="checkbox" name="question_2222[]" value="5" /> Orange</label>
  </label><br/>
  <input type="submit" />
</form>

【问题讨论】:

  • “必须在您的服务器上代理” 表示您的服务器必须向其 API 发出 POST 请求。您是否研究过如何在您已经使用的任何语言/框架中执行此操作?

标签: api ssl http-proxy basic-authentication


【解决方案1】:

我构建了一个自定义 Drupal 模块,该模块使用 Greenhouse Job Board API 生成自定义申请表。我最终做了以下事情:

  1. 我创建了一个自定义 PHP 库来使用 API。

  2. 我使用了$job = $greenhouse-&gt;getJob([JOB_ID], true);。第二个参数表示是否返回问题字段。

  3. 我使用 Drupal 的表单 API 和上述请求返回的问题字段构建了表单。

  4. 在提交表单时,我使用 PHP Curl 类将所有提交的变量传递给 Greenhouse。

  5. 对于简历/求职信字段,您必须提交多部分数据。确保您的请求标头包含:Content-Type: multipart/form-data; boundary=[YOUR_CUSTOM_BOUNDARY]

  6. 通过Curl将所有数据发布到https://[API-KEY]@api.greenhouse.io/v1/applications/

【讨论】:

    【解决方案2】:

    他们要求您将表单发布到您自己的服务器,然后让您的服务器发布到温室。否则,您需要在呈现的 HTML 中包含您的秘密和/或凭据,在这种情况下,任何人都可以获取它。

    所以您的 HTML 表单 action 属性将类似于:

    <form method="POST" action="/applications/new" enctype="multipart/form-data">
    

    然后您需要一个服务器端端点(Node、PHP、Ruby、Perl 等),它从浏览器获取表单输入并使用服务器端 POST 将其发送到 Greenhouse。

    对于 BASIC 身份验证,您将在请求中包含您的凭据和/或机密作为标头。

    当他们提到它必须“通过 SSL/TLS”时,这意味着您必须在服务器端代码中为温室 API URL 使用“https”。

    【讨论】:

    • 我相信我已经开始使用 ajax 发布到 PHP。两件事:我不确定为 dataType 或 contentType 设置什么,因为应用程序包含文本字段以及 pdf 文件。对于 Greenhouse 的 API 的跨域帖子,我需要在 PHP 中做什么?我试过了:$data = $_POST['firstName']; $url = //greenhouse api url function sendApplication() { http_post_data($url, $data); }这似乎不起作用
    • 温室员工在这里。这是正确的答案。
    猜你喜欢
    • 2012-07-19
    • 2013-10-20
    • 2014-05-15
    • 1970-01-01
    • 1970-01-01
    • 2016-10-31
    • 1970-01-01
    • 1970-01-01
    • 2012-02-13
    相关资源
    最近更新 更多