自己紹介

田村 広平 (TAMURA Kohei)

卒業論文のテーマであった「空間自己相関法」の理解のため、FFT(高速フーリエ変換)で建物の振動特性をシミュレートするプログラムを書いたこと(初めてのプログラミング)がきっかけで、未知のIT業界に入る。ITベンチャーで2年間働いた後、フリーランスに。ここ数年はOpenAMを中心としたOSSに関するサポート・研究開発をしている。JavaのOSSのトラブルシューティングが主戦場。OpenAMには、バグ修正、エンハンス、日本語化など200件以上コミットしている。最近は、OpenAM最新版の商用化に伴い、keycloakのサポートがメインタスクになりつつある。

OpenAMなどのOSSに関するお問い合わせは、以下にお願いします。

ktamura.biz.80@gmail.com

自己紹介」への15件のフィードバック

  1. OpenAMについて勉強中です。
    ワンタイムパスワード(OTP)認証について教えてください。
    OpenAMで通常のパスワード認証以外にOTPと認証連鎖させてセキュリティを高めることを想定しています。
    OpenAMのOTPの使われ方が良く理解できていない上での質問なのですが、Web情報を見る限り、OTP認証を要求する場合
    (1)OpenAM側の指定のOTPを生成して利用者のメアドに送付する。利用者はそれを入力してログイン。
    (2)OpenAM側で指定のOTPを生成するのではなく、Google Authenticatorなどのアプリを使ってコードを生成し、それを使ってログイン
    という2通りがあるのかと思います。
    この理解が正しいとして(間違っていたらご指摘ください)
    上の(1)と(2)って、セキュリティ上、そのレベルがちっとも違わない気がするのですが、(2)を選択すると何が良いのでしょうか?
    全部(1)でダメなんでしょうか? 

    いいね

    • セキュリティの観点で言うと、以下のページの解説されている、メールで送信されたワンタイムパスワードを盗むような場合に(2)の方がいいのではないかと思います。
      ※セキュリティが専門ではないので、詳しくは分かりませんが…

      http://www.ipa.go.jp/security/txt/2014/01outline.html

      メールを本人以外の人が絶対に参照できないのであれば、(1)も十分にセキュアな認証方式だと思います。
      また、(1)の方が仕組みも簡単で、導入コストも断然低いです。

      ちなみに、OpenAMでは、(1) はHOTP認証、(2) はOATH認証という認証モジュールで実現しています。

      (1) HOTP認証
      OpenSSOの頃から存在するワンタイムパスワード認証。
      ユーザーのメールアドレスに、OpenAMが生成したワンタイムパスワードを送信し、ログイン時にそれを入力します。

      (2) OATH認証
      OpenAM 10.1から提供されたワンタイムパスワード認証。
      RFC標準のOATH(Initiative for Open AuTHentication)に準拠したワンタイムパスワード認証ができます。
      YubiKeyやGoogle Authenticatorなどのクライアントのツールで生成したコードをログイン時に入力します。
      USBポートに接続したYubiKeyのセンサーにタッチするだけでログインすることも可能です。
      ユーザーが決めたシークレットキーを、サーバーとクライアントのツールの両方で共有しておく必要があるので、手間がかかります
      (これを実現する仕組みも検討・実装しないといけない)。
      メール送信のプロセスが無い分、(1)よりさらにセキュアです。
      メールを受信できない環境でも使えますが、クライアント側にツールを導入する必要があります。

      参考ページ:

      OpenAM 10.1.0 新機能紹介
      http://www.openam.jp/wp-content/uploads/openam20130412_osstech2.pdf

      OATHによるワンタイムパスワードの仕様 – 1
      http://yamatamemo.blogspot.jp/2011/05/oath-1.html

      One-Time Passwords – HOTP and TOTP
      http://blogs.forgerock.org/petermajor/2014/02/one-time-passwords-hotp-and-totp/

      いいね

  2. 現在、OpenAMの導入を検討しているものです。
    webでの検索やOpenAMの公式ドキュメントを読みましたが、
    わからないことがあったので、ご質問させてください。

    質問内容:
    「OpenAMを導入する場合、既存のデータベースのテーブルをOpenAMにインポートせずに、
    直接OpenAMのデータストアとして利用することは可能ですか」

    具体的にいいますと、
    現在運用しているサービスのユーザー認証用DB(mysql)をOpenAMにインポートせずに、
    OpenAMからDBを参照させて利用できるかをお聞きしたいです。

    もしご回答が面倒してたら、そのまま無視or削除していただいも構いません。

    以上、どうぞよろしくお願いいたします。

    いいね

    • はい。可能です。
      MySQLなどのRDBMSのテーブルで管理されたユーザーが存在する場合、以下を使って連携ができます。

      ・JDBC認証モジュール
      ・データベースリポジトリ

      前者は、テーブルに登録されたユーザーのIDとパスワードで認証する認証モジュールです。管理コンソールにログインし、

        アクセス制御 > / (最上位のレルム) > 認証

      で、モジュールインスタンスのセクションの新規ボタンをクリック。JDBCを選択して、設定します。

      後者は、テーブルに登録されたユーザーデータをOpenAMから参照、登録、更新、削除できるデータストアモジュールです。管理コンソールにログインし、

        アクセス制御 > / (最上位のレルム) > データストア

      で、新規ボタンをクリック。データベースリポジトリ (アーリーアクセス)を選択して、設定します。
      ※データベースリポジトリは、開発後から「アーリーアクセス」という位置付けのままになっており、グループ機能などのオプション機能が正常に動作しません。

      いいね

  3. OpenIGの勉強をしているのですが、行き詰まってしまったので、質問させてください。

    (状況)
    Responseの中に、ログインフォームを示す文字列が存在したら、代理認証(ログインフォームを
    submitする。)を行うつもりですが、submitを行わない。
    予想では、原因は不明ですが、Responseの中に、ログインフォームを示す文字列を見つけることが
    できないようです。
    予想の根拠ですが、SwitchFilterのConditionを${exchange.isLoginPage.found == ‘true’}を
    ${exchange.isLoginPage.found == ‘true’ || 1 ==1}にしてやると、LoginChain Handlerに
    流れていくので。

    ・.openig/config/routes/01-hogohogo.json (抜粋)
    {
    “name”: “hogohogoChain”,
    “type”: “Chain”,
    “config”: {
    “filters”: [
    {
    “type”: “EntityExtractFilter”,

    “config”: {
    “messageType”: “RESPONSE”,
    “target”: “${exchange.isLoginPage}”,
    “bindings”: [
    {
    “key”: “found”,
    “pattern”: “action=\”/webhogohogo/admin/authentication”,
    “template”: “true”
    },
    {
    “key”: “CSRFToken”,
    “pattern”: “_csrf\”\\svalue=\”(.*)\””,
    “template”: “$1”
    }
    ]
    }
    },
    {
    “type”: “SwitchFilter”,
    “config”: {
    “onResponse”: [
    {
    “condition”: “${exchange.isLoginPage.found == ‘true’}”,
    “handler”: “LoginChain”
    }
    ]
    }
    }
    ],
    “handler”: “OutgoingChain”
    }
    },
    ・対象のログインフォーム(抜粋)
    ログイン画面

    ログイン画面

    ・環境
    OS..centOS 6.7
    ApServer…Tomcat7.0.64
    OpenIG…3.1.0

    余裕のあります時に回答していただけたら助かります。
    勝手なお願いで申し訳ありませんが、よろしくお願いいたします。

    いいね

    • 次の部分の「”」の対応関係が正しくないように思います。
       “pattern”: “action=\”/webhogohogo/admin/authentication”,
      ぱっと見で判断したので、それが原因ではないかもしれませんが。

      いいね

  4. 返信ありがとうございます。
    ご指摘通り
    “pattern”: “action=\”/webhogohogo/admin/authentication”,

    “pattern”: “action=\”/webhogohogo/admin/authentication\””,
    を変えてみたのですが、結果変わらずでした。
    “pattern”: “form”,や“pattern”: “.*”,
    に変えてもみたのですが、結果変わらずでした。
    “pattern”: “_csrf\”\\svalue=\”(.*)\””,
    の方も機能していないので、予想ではありますが、contentを読み込めていないような感じです。

    OpenIG3.1.0のソースを落としてきて、3.1.0リリース後に出たパッチをあててwarを作り様子をみようかと思っています。
    (はっきり確認していませんが、パッチはあてられるとどこかで読んだので。)
    最後はデバックですかね。

    ※このjsonですが、2.1.0ではうまくいっております。(バージョンの差異を直した上ですが。)ただ、2.1.0はmatcesがあまりよろしくないのと、できる限り最新のものを使用したいというのがあります。

    ありがとうございました、何か気づくことがありましたら、またご指摘いただければ助かります。

    いいね

    • 上のJSONをコピペするとダブルクォーテーションが全角になっているみたいですが、実際のファイルは半角になってますよね?(※念のため確認です。)

      追記:
      全角のシングルクォーテーションも含まれているようです。それ以外の構文は合ってそうでした。

      以下のブログにOpenIGのトラブルシューティングについて書いてあります。CaptureFilterなどを使うと解析しやすいかもしれません。

      http://sauthieg.github.io/openig/2014/10/12/welcome-to-openig-part-4.html

      それでも解決しなければ、Eclipseなどでリモートデバッグしてみて下さい。
      EntityExtractFilter.process()の128行目あたりにブレークポイントを張って、message.getEntity().toString()の値にaction=”/webhogohogo/admin/authentication”が含まれているかチェックしてみて下さい。

      いいね

      • いろいろフォローありがとうございます。
        結論から申し上げますと上手くいきました。

        原因ですが、switchFilterとEntityExtractFilterの設定順に誤りがあったようです。
        EntityExtractFilter,switchFilter⇒switchFilter,EntityExtractFilter
        の順番に変更したら想定通りの動きになりました。(おそらくはResponseの場合のみ?)
        完全に理解しているわけではないのですが、EntityExtractFilter,switchFilterの
        ソースを見ているとそう感じました。

        追記ですが、全角との指摘ですが、コピペではなく、コメントにそのまま入力したので、
        入力ミスがあったためです。

        ありがとうございました。

        いいね

コメントを残す