「ものづくり:make」を楽しみながら学ぶ人へ向けた独習サポートサイト。

micro:bit Lab.【マイクロビット】

micro:bit Lab.では、micro:bit【マイクロビット】に関する情報を紹介しています。

Webサーバーの基本的な認証方法の一つ
15-6

micro:bitからBasic認証を通す

2021-08-102021-08-10

Wi-Fi通信モジュール(ESP8285)とアンテナを搭載したGroveデバイス「UART WiFi V2 (ESP8285)」を使って、micro:bitからWebサーバーの基本的なアクセス制限の一つであるBasic認証を通す方法を紹介します。

1.UART WiFi V2 (ESP8285)

seeedUART WiFi V2 (ESP8285)は、Wi-Fi通信モジュール(ESP8285)とアンテナを搭載したGroveデバイスです。UART WiFi V2の機能について「15-3.UART WiFi V2 (ESP8285)」で詳しく紹介していますのでご覧ください。

図15-6-1-1.UART WiFi V2 (表面)
図15-6-1-1.UART WiFi V2 (表面)

2.BASIC認証を通す準備

Webサーバーへのアクセス

Webサーバーへのアクセスは完了しているものとします。micro:bitからWebサーバーへのアクセスは「15-5.micro:bitからWebサーバーへアクセスする」を参考にしてください。

3.Basic認証を通す

ブラウザーによるアクセス

Basic認証は、Webサーバーのディレクトリーやファイルに、アクセス制限をかけることができる基本的な認証方法の一つです。ブラウザーから、Basic認証でアクセス制限されたディレクトリーやファイルにアクセスしようとすると、ユーザー名とパスワードの入力を促す認証ダイアログが表示されます。

下の図は、ブラウザー(Firefox)から、Basic認証でアクセス制限された「http://sanuki-tech.net/wifi-test/basic-auth/」へアクセスして、認証ダイアログが表示されたようすです。

図15-6-3-1.ブラウザーによるアクセス
図15-6-3-1.ブラウザーによるアクセス

認証ダイアログで、ユーザー名とパスワードの正しい組み合わせが入力できないとエラー(401 Unauthorized)となり、下の図のようなメッセージが表示されます。

図15-6-3-2.ブラウザーによるアクセス
図15-6-3-2.ブラウザーによるアクセス

ユーザー名とパスワードの正しい組み合わせを入力すると、情報(このURLの場合は「auth ok」と言う文字)が表示されます。

図15-6-3-3.ブラウザーによるアクセス
図15-6-3-3.ブラウザーによるアクセス

Basic認証時のHTTPリクエストとHTTPレスポンス

Basic認証でアクセス制限されたディレクトリーやファイルにアクセスすると、WebサーバーからWWW-Authenticateヘッダーを含むHTTPレスポンスが返ります。

WWW-Authenticateヘッダーは、ディレクトリーやファイルへのアクセス権を取得するために使われる認証方式を、ブラウザーへ通知するものです。Basic認証の場合「Basic」がセットされています。このHTTPレスポンスを受け取ることで、ブラウザーはBasic認証が必要であると判断して、認証ダイアログを表示します。

認証ダイアログに、ユーザー名とパスワードが入力されると、それらの値をコロン(:)で連結してBase64で符号化した文字列を、Authorizationヘッダーに含めて、HTTPリクエストとしてWebサーバーへ送ります。

「VXNlcjpQYXNzd29yZA==」が、ユーザー名とパスワードをコロン(:)で連結したもの(この例では「User:Password」)を、Base64で符号化した文字列です。

Authorizationヘッダーを含むHTTPリクエストを受け取ったWebサーバーは、ユーザー名とパスワードの組み合わせが、登録されているものと一致する場合、そのディレクトリーやファイルにアクセスできるアクセス権を与えます。

このように、Basic認証でアクセス権を取得するには、WWW-Authenticateヘッダーを含むHTTPレスポンスとAuthorizationヘッダーを含むHTTPリクエストによるやり取りが行われていることがわかりました。では、micro:bitからBasic認証によるアクセス権を取得するにはどうすればいいのでしょうか?

micro:bitからBasic認証を通すには?

前述のように、WWW-Authenticateヘッダーを含むHTTPレスポンスを受け取ったら、Authorizationヘッダーを含むHTTPリクエストを返すようにプログラミングすることで、Basic認証によるアクセス権を取得できそうです。が、ちょっと面倒ですね。

実は、あらかじめアクセスするディレクトリーやファイルに対して、Basic認証によるアクセス権が必要であるとわかっている場合は、HTTPリクエストにAuthorizationヘッダーを含めることで、アクセス権を取得することができます。

では、Basic認証が必要なURL(この例では「http://sanuki-tech.net/wifi-test/basic-auth/」)にアクセスするときのHTTPリクエストを考えてみましょう。表3-3は「15-5.micro:bitからWebサーバーへアクセスする」で解説したHTTPリクエスト(GETメソッド)です。これに、Authorizationヘッダーを含めて、Basic認証のアクセス権を取得できるようにしたのが表3-4です。

1行目がリクエストラインで、ここにBasic認証が必要なパス(/wifi-test/basic-auth/)を記述します。5行目がAuthorizationヘッダーで、ここに認証のタイプがBasic認証(Basic)であること、およびBasic認証に必要な資格情報(VXNlcjpQYXNzd29yZA==)を記述します。この資格情報は、ユーザー名とパスワードをコロン(:)で連結したもの(この例では「User:Password」)を、Base64で符号化した文字列です。「Base64 符号化」などで検索して見つかる変換サービスを利用して、あらかじめ文字列を作成しておきます。

4.プログラム(ブロック)

初期設定後、ボタンAを押したときに、Wi-Fiアクセスポイントに接続後、Webサーバーへアクセスするプログラムです。アクセスには、Basic認証によるアクセス権が必要です。正常に接続できた場合、Webサーバーから返信されたHTTPレスポンスの内容をLED画面に表示します。「15-5.micro:bitからWebサーバーへアクセスする」との差分のみ解説します。

最初だけ実行するプログラム

初期設定です。Basic認証に必要な変数「Credentials」を定義しています。

図15-6-4-1.最初だけ実行するプログラム
図15-6-4-1.最初だけ実行するプログラム

関数:SendATCommandWaitResponse

変更はありません。

図15-6-4-2.関数:SendATCommandWaitResponse
図15-6-4-2.関数:SendATCommandWaitResponse

ボタンAが押されたときに実行するプログラム

WebサーバーへアクセスするためのHTTPリクエストに「Authorizationヘッダー」を追加しました。

図15-6-4-3.ボタンAが押されたときに実行するプログラム
図15-6-4-3.ボタンAが押されたときに実行するプログラム

5.プログラム(JavaScript)

プログラム(JavaScript)です。

6.動作確認

micro:bitにプログラムを書き込んだ後、USBケーブルをGrove Shield for micro:bit v2.0側のMicro USB端子に接続します。この端子から電源供給しないと正常に動作しませんでした。LED画面にハートが表示されたことを確認して、ボタンAを押します。うれしい顔が表示された後、HTTPレスポンスの内容が表示されると成功です。

表6-2は、Webサーバーのアクセスログです。GETメソッドにより、 /wifi-test/basic-auth/へアクセスしているようすが記録されています。リクエストの処理結果は「200 OK」、UserAgentは「micro:bit」です。

おすすめ品

micro:bit用Groveシールド v2.0

Groveモジュールを接続できるmicro:bit用の拡張基板micro:bit用Groveシールド

Grove UART WiFi V2 ESP8285

Grove - UART WiFi V2.0(ESP8285)は、ESP8285 IoT SoCを搭載したWi-Fi通信モジュールです。

micro:bit×Groveで楽しむ電子工作

出版社
カットシステム
発売日
2019/9/1

Grove汎用ケーブル ボード用4ピンバックル 20cm(5本)

GROVEシステムの4ピンケーブルです。20cm、5本入り。

この記事を読んだ人は、こんな記事にも興味があります。
スポンサーリンク
TOPへ移動
目次へ移動