メニューボタン
IBMi海外記事2024.10.09

Basic認証を使用したWebサービスを作成する

Mike Larsen 著

長年、Webサービスに関する作業に従事してきましたが、それらの作成には、たいてい、IBMのIWS(Integrated Web Service: 統合Webサービス)ツールを使用しています。このツールには、RPGプログラムからの迅速なWebサービスの作成を可能にする、ウィザードベースのインターフェースが備えられています。先日、Basic認証(基本認証)を使用するWebサービスを作成しました。その手法をここで披露したいと思います。

この記事では、WebサーバーおよびWebサービスの作成方法については、すでにご存じであることを前提としています。そのため、ここではBasic認証機能を追加するのに必要な手順を紹介するのみとします。サーバーおよびサービスの作成方法についても、今後の記事で取り上げることをご希望の場合は、その旨をコメント欄にお記しください。喜んで対応します。

この記事用に、「AUTH_WS」というサーバーを作成し(図1)、「HTTP Servers(HTTP サーバー)」タブをクリックしました。

図1.Webサーバー

Basic認証を使用可能にするには、サーバーの構成に変更を加える必要があるため、「Edit Configuration File(構成ファイルの編集)」をクリックします(図2)。

図2.構成ファイル

そうすると構成ファイルの内容が表示され、その編集を行えるようになります(図3)。コードの中で「Location」というセクションを探します。変更する必要があるのはそのセクションです。

図3.構成ファイルの編集

そのセクションにあるコードを削除して、以下のコードに差し換えます。

ProfileToken On
AuthType Basic
AuthName "IBM i User Profile Authentication"
Require valid-user
PasswdFile %%SYSTEM%%
order deny,allow
Allow from all

図4に、修正後のコードを示します。

図4.Basic認証用に修正されたコード

サーバーに対してこれらの変更を行うことによって、Basic認証を使用することをサーバーに伝えました。つまり、サーバーは、このサーバーに配置されるどのサービスの利用者に対しても、ユーザー名およびパスワードの提供を求めることになります。では、ユーザー名とパスワードは、どこに由来するものなのでしょうか。ここでは、IBM i でセットアップされている有効なユーザー名およびパスワードを要求するようにサーバーに指示しています。このプロファイルには、作成時に最小限の権限のみが付与されているはずです。

構成ファイルを修正して「OK」をクリックしたら、変更内容を適用するためにサーバーを停止して再起動します。

次いで、サーバーにWebサービスを配置します。ここでは、JSONオブジェクトを入力として受け取り、JSONオブジェクトをサービス利用者に返す、非常にシンプルなテストRPGプログラム(以下のコード)を作成しています。

**FREE
ctl-opt option (*srcstmt : *nodebugio : *nounref);
ctl-opt Pgminfo(*pcml: *dclcase : *module);
ctl-opt debug  (*input);
ctl-opt dftactgrp (*no);
//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
//  Program : Test_ws1
//  Author  : Mike Larsen
//  Date Written: 07/30/2024
//  Purpose : Example of an RPG web service.
//
//====================================================================*
//   Date    Programmer  Description                                  *
//--------------------------------------------------------------------*
// 07/30/24  M.Larsen    Original code.                               *
//                                                                    *
//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - *

dcl-ds MessageOutDs;
       MessageSentIn   char(30);
       MessageSentOut  char(30);
end-ds;

dcl-ds MessageInDs;
       MessageIn   char(30);
end-ds;

// Prototypes (entry parameters)

dcl-pr Test_ws1 ExtPgm;
       ParmInMessage  likeds(MessageInDs);
       ParmOutMessage likeds(MessageOutDs);
End-pr;

// Main procedure interface

dcl-pi Test_ws1;
       ParmInMessage  likeds(MessageInDs);
       ParmOutMessage likeds(MessageOutDs);
End-pi;

 getOutMessage();

 *Inlr = *On;
 Return;

 //--------------------------------------------------------
 // getOutMessage subprocedure
 //--------------------------------------------------------

 dcl-proc getOutMessage;

   ParmOutMessage.MessageSentIn = 'You said ' + %trim(ParmInMessage.MessageIn);
   ParmOutMessage.MessageSentOut = 'I said goodbye';

 end-proc;

//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -       

サーバーの作成の場合と同様に、ここでは、サービスでBasic認証を使用できるようにするのに必要となる手順を示すのみとします。

IWSウィザードのステップ3に進んで、「Protect using authentication method:(認証方式を使用した保護:)」オプションで「*BASIC」を選択します。このオプションは、WebサービスにBasic認証を使用するように指示します(図5)。

図5.Basic認証を使用するようにWebサービスを設定

ウィザードのステップ6で、このサービスのユーザーIDが、このサービスで使用するためにIBM i でセットアップしているユーザー プロファイルになるように設定しました。そのユーザーIDが、Basic認証で使用されます(図6)。

図6.Basic認証使用プロファイルの設定

これでサービスが作成されたので、それをテストしてみましょう。

ここでは、SoapUiを使用してWebサービスを実行しますが、これは単なる個人的な好みに過ぎません。Postmanを使用するというのでも構いません。どちらのツールも使えます。

SoapUiでプロジェクトをセットアップしました(図7)。非公開にしておきたいので、エンドポイントを黒塗りにしていることに注意してください。また、サービスに渡されるJSONオブジェクトをセットアップしています。

図7.SoapUiプロジェクト

次に、SoapUiでBasic認証をセットアップする必要があります。それを行うには、「Auth(認証)」タブをクリックして、「Authorization:(認証:)」で「Basic」を選択します(図8)。

図8.Basic認証のセットアップ

Basic認証で使用するためにIBM i でセットアップしたプロファイルのユーザー名およびパスワードを入力します。

サービスを実行してみると、予想していたレスポンスを確認できました(図9)。

図9.SoapUiでの成功レスポンス

サービスに不正な認証情報を送信していたとしたら、どうなったでしょうか。では、試してみましょう。IBM i 上に存在していないプロファイルで、サービスを実行してみます(図10)。

図10.不正なユーザー名

サービスを実行したところ、不許可のレスポンスを受け取りました(図11)。

図11.SoapUiでの失敗レスポンス

これは、予想していた通りのレスポンスです。

システムおよびプロセスをよりセキュアにすることは、常に重要なことです。そして、IBMは、IWSツールを使用して作成されたWebサービスに簡単にBasic認証を適用できるようにしてくれました。この手法は、現在作業中のWebサービスで初めて使用したのですが、今後も使用し続けようと思っています。

あわせて読みたい記事

PAGE TOP