LDAPで認証するHTTP Rest APIに接続する方法

概要

REST API Web サイトに接続するための Ruby スクリプトを作成しています。 Web サイトは、AD 資格情報を使用した LDAP / SSO を使用して認証されるため、基本認証やユーザー/パスワードを指定する必要はありません。

これまでのコードは次のとおりです。

resource_http = Net::HTTP.new(webserver.company.com, 443)
resource_http.use_ssl = true
resource_http.verify_mode = OpenSSL::SSL::VERIFY_NONE
resource_request = Net::HTTP::Post.new("/api/endpoint")
resource_request.set_form_data({"chocolate"=>"yes","beer"=>"yes"})
resource_response = resource_http.request(resource_request)

しかし、認証エラーが発生します。

Net::HTTPUnauthorized 401 Authorization Required

Net::LDAP を使用して、コンピューター上で資格情報を認証できます。

ldap = Net::LDAP.new
ldap.host = "ldap.company.com"
ldap.port = "389"
ldap.auth "[email protected]", "password"
ldap.bind

しかし、この LDAP 情報を HTTP リクエストに「添付」または渡す方法がわかりません。

すべての Google 検索で、Web サイト アプリで SSO/認証を有効にすることが示されますが、私はそれをしようとしているのではなく、Ruby スクリプトを使用して既存の LDAP 認証された Web サイトに接続したいと考えています。

アップデート #1 いくつかの Ruby フォーラムでは、gem HTTPI と「curb」アダプターの使用を教えてもらいました。このアダプターは、Curl ライブラリに依存して Kerberos/SPNEGO 認証を処理します。 ただし、curb インストーラーを、Web サイト (Windows コンピューター用) にリンクされているcurl ライブラリと連携させることはできませんでした。

Kerberos モジュールを使用してコードを Python に移動しました。チケットを生成して HTTP リクエスト ヘッダーに追加すると、REST API によって認証され、必要なデータが返されます。

私はまだ勉強中なので、コードが Python で動作するとしても、Ruby でも動作できるようにしたいと思っています。

Python のサンプルコード: https://translate.google.com/translate?hl=ja&sl=en&tl=ja&u=https://gist.github.com/DevOpsCow/d374300304d7beef8a03

解決策

HTTP 経由で資格情報を渡す方法はたくさんあります。 REST API で LDAP サーバーのホスト/ポート情報を渡すことができたら驚くでしょう (これは巨大なセキュリティ ホールになる可能性があります)。最も可能性の高いシナリオは、REST API が期待する形式でユーザー名とパスワードを指定する必要があるということです。次に、REST API は LDAP サーバーに対して認証を実行し、認証結果に応じて、REST API から対応する応答/ステータスを返します。

簡単に言うと、HTTP 経由での認証がどのように行われるべきかを確認するには、REST API の管理者 (または API ドキュメント) から情報を取得する必要があります。

これがお役に立てば幸いです。