GAS BASIC認証をパスしてJSONをPOSTする方法

GAS
この記事は約5分で読めます。

さて、今回はGASでBASIC認証をパスして、APIにJSONをPOSTする方法です。

BASIC認証って何って方から、GASでbasic認証をパスする必要が出てきた(内部エンジニアが作った簡易APIを叩きたい時とか)、みたいな状況の方を対象にして解説していきたいと思います。

スポンサーリンク

BASIC認証とは?

ベーシック認証(Basic認証)とはWebサイトの特定の領域、つまり特定のディレクトリ(ページ)やファイルにアクセス制限をかけることができる認証方法の1つです。

Webサイトを運用したことがあれば、一度はお目にかかることがあるかと思いますが、ポップアップが出てきて、IDとパスワードを求められるあれです。

ID(ユーザ名)とパスワードで認証する昔からある認証方式の一つ

ググると画像がいっぱい以下のように出てきます。

BASIC認証の作成方法

それでは別にノンプロが理解する必要はないのですが、少しだけBASIC認証の裏側も解説していきます。これが、わかれば、裏側の動作がわかり、この後説明するGASでの書き方の概要が理解し易くなるかと思い。

BASIC認証の基本

設定方法は非常に簡単で、サーバーに「.htaccess」ファイルと「.htpasswd」ファイルを作成して、それぞれのファイルに必要記述を行っていくだけです。

2つのファイルで設定が終わるということは、簡単に実装できるということでもあり、他方で、セキュリティ的にそれほど複雑なことはしにくい(シンプル=セキュリティが単純に弱いというのはちょっと語弊もありますが)ということも言えます。

サーバ側の動作

クライアントから、リクエストを受けたサーバでは、基本的に以下の流れで処理がなされています。

Basic認証 サーバ側の動作
  • step1
    クライアントからリクエストを受け取る
  • step2
    リクエスト内容をdecodeする
  • step3
    デコードした要素が、htpasswdファイルに定義された、ID・PASSWORDと一致しているかを検証

要は、リクエスト内容をデコードして、htpasswdファイルの登録内容と一致を確認して、OKであれば、認証するという流れです。この流れを頭に入れておくと、リクエスト側の実装も楽です。

htaccessファイル

イメージとしては、誰に認証をどの方式で求めるかを定義するファイルという感じです。ちょっと語弊もありますが。。

こちらには、以下の4つの要素を記述していきます。

AuthType 認証方式を宣言
AuthName 認証時に表示される文言を指定
AuthUserFile htpasswdをフルパスで指定
require .htaccessに記載されたIDのうち認証を求めるユーザーを指定

AuthTypeには、BasicとDigestの2パターンがあり、BASIC認証を利用する場合は、BASICを指定します。digest認証ってのもググってもらうと何かわかるかと思います。

requireは大概valid-userを指定して、パスワードファイルに指定されるユーザ全てに認証を求めるようにしています。

htpasswdファイル

こちらは名前の通り、passwordを設定するファイルです。

[ユーザー名1]: [暗号化されたパスワード1]
[ユーザー名2]: [暗号化されたパスワード2]

ユーザ名とパスワードがセットになって登録されていて、このファイルをhtaccess側で指定して読み込んでいます。

GASでのリクエスト方法

では、本題のリクエスト方法についてみていきましょう。

サンプルコード

先に出しておくと、ざっとこんな感じで処理可能です。

function basicauth_request() {
  const ID = PropertiesService.getScriptProperties().getProperty("ID");
  const PASS = PropertiesService.getScriptProperties().getProperty("PASS");
  const url = "URL";
  
  let body = {
    "POSTしたい内容"
  }
   
  let option={
    'method': 'POST',
    'contentType': 'application/json; charset=utf-8',
    "payload": JSON.stringify(body),
    headers: {"Authorization" : " Basic " + Utilities.base64Encode(ID + ":" + PASS)}
  }

  UrlFetchApp.fetch(url,option);
}

BASIC認証リクエストの解説(簡易)

では、少しだけ解説を入れていきます。

optionのheadersについて

ここが、BASIC認証をパスするための肝となります。

以下の要素が含まれています。

BASIC認証 headers
  • ヘッダーにBASIC認証用の要素(IDとパスワード)をいれる
  • Authorizationとして認証方法を指定
  • BASICを指定する
  • base64Encodeで”ID:PASS”ストリングをエンコードする

最後のbase64Encodeしている理由が、先ほど説明したサーバ側でdecode処理が実施されるからです。

まとめ

今回は、【GAS BASIC認証をパスしてJSONをPOSTする方法】として、GASでBasic認証をパスしてJSONをPOSTする方法を紹介しました。

ユースケースははてなとかのAtomとかくらいか、もしくは内部APIを叩く時くらいに限られるかもしれませんが、まぁエンジニアと内部連携する時にはよく利用しますので、知っておいても損はないかなと思います。

では、また。

タイトルとURLをコピーしました