を実施しています。
インターネットサイトの抽出は成功したのですが、社内Windowsドメイン環境にあるIIS上のWebPage
から情報(RSSFeed)を取得しようとすると、401 認証エラーになってしまいます。
CPANの設定も確認し、http_proxyの設定には社内のproxyサーバ(http://IPアドレス:ポート番号)
とproxy user/proxy password には、ドメイン認証可能なユーザとパスワードを設定したのですが
うまくいきません。
どなたかご存知の方がいらっしゃいましたら、ご回答よろしくお願いいたします。
若干情報が足りませんが、以下の前提で回答します。
・IIS上のサイトにはWindows統合認証が設定されている
・プロキシサーバには認証がかかっていない
・401エラーを出しているのはプロキシサーバではなくIIS
まず、Windows統合認証はBASIC認証とはまた別の仕組みであるため、BASIC認証用の設定をしても認証は通りません。
次に、proxy user/proxy passwordはプロキシの認証に対するものなので、そこに設定したユーザー名/パスワードはIISには渡っていません。
そのため認証が通らず401エラーになっているのだと思います。
plaggerにはWindows統合認証に対応したプラグインというのは無いようなので、
フィードのあるフォルダだけWindows統合認証とBASIC認証を両方有効にして、
BASIC認証で認証するようにするのが現実的な解決方法だと思います。
IISでのBASIC認証の設定方法については以下を参照してください。
http://technet.microsoft.com/ja-jp/library/cc759649.aspx
plaggerでのBASIC認証のやり方についてはPlagger::Plugin::UserAgent::AuthenRequestのコメントにある使い方を参照してください。UserAgent::AuthenRequestでググればいくつか例が見つかるはずです。
http://plagger.org/trac/browser/trunk/plagger/lib/Plagger/Plugin...
度々失礼します。
PlaggerはLWPを使ってフィードを取得しているのですが、なんとLWPは普通にWindows統合認証に対応しているようです。なんというかさすがです。
http://search.cpan.org/~gaas/libwww-perl/lib/LWP/Authen/Ntlm.pm
ただ、プロトコルの都合上LWP::UserAgentにkeep_aliveオプションを指定しないと動作しません。
残念ながらPlaggerに標準添付のプラグインにはそのオプションを指定できる機能を持ったものはないようですので、せっかくなので作ってみました。
package Plagger::Plugin::UserAgent::KeepAlive; use strict; use warnings; use base qw/Plagger::Plugin/; use List::Util qw/first/; sub register { my($self, $context) = @_; $context->register_hook( $self, 'useragent.init' => \&set_keep_alive, ); } sub set_keep_alive { my($self, $context, $args) = @_; my $keep_alive = $self->conf->{keep_alive}; if ($keep_alive) { $context->log(info => "Set keep alive to $keep_alive"); $args->{ua}->conn_cache({ total_capacity => $keep_alive }); } } 1;
上記のプラグインをPlaggerのプラグインディレクトリ内のUserAgentディレクトリにKeepAlive.pmとして設置し、
設定ファイルに以下の内容を追加すればWindows統合認証で認証出来るようになるはずです。
host,username,passwordの設定は適宜変更してください。
- module: UserAgent::KeepAlive config: keep_alive: 1 - module: UserAgent::AuthenRequest config: host: example.com:80 auth: nltm realm: username: domain\username password: password
教えていただいたとおり、C:\Perl\site\lib\Plagger\Plugin\UserAgent\KeepAlive.pmを作成
IISの設定を「ディレクトリセキュリティ(タグ)→認証とアクセス制御→編集→総合Windows認証のみチェック」
「Webサイト(タグ)→TCPポートに88を設定」
ntlm_test.yaml
global:
plugin_path:
- C:\Perl\site\lib\Plagger\Plugin
assets_path: C:\Perl\site\lib\Plagger\assets
timezone: Asia/Tokyo
log:
level: debug
plugins:
- module: UserAgent::KeepAlive
config:
keep_alive: 1
- module: UserAgent::AuthenRequest
config:
host: *****:88
auth: ntlm
realm: test
username: domain/userId
password: Password
- module: Subscription::Config
config:
feed: http://*****:88/wiki.xml
- module: Publish::Feed
config:
dir: C:\www
filename: ntlm_test.rss
format: RSS
plagger -c ntlm_test.yaml 実行結果
=== 省略 ===
Plagger::Plugin::Aggregator::Simple [info] Fetch http://*****:88/wiki.xml
Plagger::Plugin::UserAgent::KeepAlive [info] Set keep alive to 1
Plagger::Plugin::UserAgent::AuthenRequest [info] Adding credential to test at *****:88
Plagger::Cache [debug] Cache MISS: Aggregator-Simple|http://*****:88/wiki.xml
Plagger::Plugin::Aggregator::Simple [error] GET http://*****:88/wiki.xml failed: 401 Unauthorized
Plagger [error] http://*****:88/wiki.xml is not aggregated by any aggregator
これだけやっても認証エラーになってしまいます。
IISの設定から総合Windows認証をはずして、匿名アクセスを有効にすると、エラーなくRSSフィードの取得が
できるのですが。
また、基本認証でも同く認証エラーです。
何かお気づきの点がありましたら、教えてもらえると助かります。
勉強不足で、ソースの囲み方がわかりません。べたで貼り付けています。
回答ありがとうございます。(前提はすべてあっています)
>plaggerにはWindows統合認証に対応したプラグインというのは無いようなので、
探したのですが、こちらでも発見できずでした。
IISにBASIC認証の設定を追加する方法は、セキュリティの面から抵抗されそうですが、
これからいただいた情報を元に確認します。
情報収集と加工に際してPlaggerは有効に利用可能だと思うのですが、同じような問題に
ぶつかったとき、「Windows統合認証に対応したプラグイン」を作った方ってどこかにいないですかね。