Plaggerの設定を終了し、RSSフィードの抽出および結合、WebPageからLINKの抽出とRSSFeedへの変換

を実施しています。
インターネットサイトの抽出は成功したのですが、社内Windowsドメイン環境にあるIIS上のWebPage
から情報(RSSFeed)を取得しようとすると、401 認証エラーになってしまいます。

CPANの設定も確認し、http_proxyの設定には社内のproxyサーバ(http://IPアドレス:ポート番号)
とproxy user/proxy password には、ドメイン認証可能なユーザとパスワードを設定したのですが
うまくいきません。

どなたかご存知の方がいらっしゃいましたら、ご回答よろしくお願いいたします。

回答の条件
  • URL必須
  • 1人10回まで
  • 登録:
  • 終了:2009/03/03 11:30:03
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答2件)

id:rryu No.1

回答回数30ベストアンサー獲得回数2

ポイント35pt

若干情報が足りませんが、以下の前提で回答します。


・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...

id:bowseven

回答ありがとうございます。(前提はすべてあっています)

>plaggerにはWindows統合認証に対応したプラグインというのは無いようなので、

探したのですが、こちらでも発見できずでした。

IISにBASIC認証の設定を追加する方法は、セキュリティの面から抵抗されそうですが、

これからいただいた情報を元に確認します。

情報収集と加工に際してPlaggerは有効に利用可能だと思うのですが、同じような問題に

ぶつかったとき、「Windows統合認証に対応したプラグイン」を作った方ってどこかにいないですかね。

2009/02/25 11:30:40
id:rryu No.2

回答回数30ベストアンサー獲得回数2

ポイント35pt

度々失礼します。

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
id:bowseven

教えていただいたとおり、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フィードの取得が

できるのですが。

また、基本認証でも同く認証エラーです。

何かお気づきの点がありましたら、教えてもらえると助かります。

勉強不足で、ソースの囲み方がわかりません。べたで貼り付けています。

2009/03/02 13:21:10
  • id:mattn
    Plagger::Plugin::Aggregator::Simple に

    use LWP::Debug qw(+ -conns);

    を入れてデバッグしてみてはどうでしょうか?
    私の場合は上記設定後、realmを空にするとうまくいきました。
  • id:bowseven
    デバックとHTTPリクエストヘッダーの確認によりrealmは設定が必要でした。

    また、Plaggerの設定からユーザ認証することはあきらめて、純粋にPerlのロジックとして
    認証ロジックを作成し、取得に成功しました。
    CPANのライブラリを調べると、他にも利用可能なライブラリが多数あり、大変勉強になりました
    ご協力していただいた方々に感謝します。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません