« RestletでのAnnotationの続き | トップページ | VNCサーバーとの付き合い方 »

2020年10月11日 (日)

RestletにBasic認証を構成してみた

やっぱりRestletサーバーは守りたいので認証を実装するのは常道。そこでBasic認証を実験してみた。

まずRestletサーバー側の実装。認証保護の入れ物を作って、そこに保護するアプリケーションを投げ込む感じのようだ。

   String userid1="user1";
   String passwd1="pass";
// Basic認証で保護する入れ物をつくる。名前はPATHPilot-realm。
   ChallengeAuthenticator guard1 = new ChallengeAuthenticator(null, ChallengeScheme.HTTP_BASIC, "PATHPilot-realm");
// IDとシークレットのVerifierをつくる。
   MapVerifier mapVerifier1 = new MapVerifier();
// useridとpasswordペアを登録する。
   mapVerifier1.getLocalSecrets().put(userid1, passwd1.toCharArray());
   guard1.setVerifier(mapVerifier1);
   Restlet restout1 = new DataOutput1().dataout;
// 入れ物にrestout1をいれる。入れられるものはRestletクラスのもの。
   guard1.setNext( restout1 );

   Component component = new Component();
   component.getServers().add(Protocol.HTTP, 8010);
// URIが/nextの場合にguard1に飛ぶ
   component.getDefaultHost().attach("/next",guard1);


認証保護の入れ物に投げ込んだアプリケーションは以下のとおり。

public class DataOutput1 extends Application {

   Restlet dataout = new Restlet(){
      @Override
      public void handle ( Request requet, Response response){

         response.setEntity(new StringRepresentation("hello, my friend from Next", MediaType.TEXT_PLAIN));

      }
   };
}

WEBブラウザー(Firefox)からアクセスしてみる。

http://192.168.1.62:8010/next

すると以下のポップアップが現れた。認証保護入れ物の名前のPATHPilot-realmも表示されている。

Auth

当然のことながら、user1/passと入力すると認証がパスして以下が表示される。違う組み合わせだと認証エラー。予定通りだ。

Auth2

次にRaspberry PiのPythonのコード実装に移る。

こちらは至って簡単で以下のコードを書くだけ。

import reqeusts
from requests.auth import HTTPBasicAuth

      response=requests.post("http://192.168.1.62:8010/next", auth=HTTPBasicAuth("user1","pass"))

reponseとして以下が返ってくる。
hello, my friend from Next

これで私のRaspberry PiとしかRestletサーバーは会話しないように出来る。めでたし、めでたし。

« RestletでのAnnotationの続き | トップページ | VNCサーバーとの付き合い方 »

ラズパイ日記」カテゴリの記事

コメント

コメントを書く

(ウェブ上には掲載しません)

« RestletでのAnnotationの続き | トップページ | VNCサーバーとの付き合い方 »