2

中央認証サーバーの背後にある php ページにアクセスする必要があります。他の手段を使用してこのサイトにアクセスしようとすると、認証を待って CAS ページにリダイレクトされます。基本的にGET、認証ページに変数を提供する必要があります。(望まない。) 残念ながら、このページの CAS を削除することはできません。これは、重大なセキュリティ リスクであるためです。

だから私の質問は、私が持っている資格情報をCASに提供し、そこからCookieを保存し、それを使用してphpページにアクセスする方法はありますか?

以下の私の試み:

メソッドを使用しているのでGET、php ページで値を指定するまで待つ必要はありません。実際にページにアクセスするだけで済みます。https://site.com/page.php?var1=value1&var2=value2

資格情報を使用してページにアクセスするWebClientとして、クラスを作成しましたCookieAwareClient

public class CookieAwareWebClient : WebClient
{
    public CookieAwareWebClient()
    {
        CookieContainer = new CookieContainer();
    }
    public CookieContainer CookieContainer { get; private set; }

    protected override WebRequest GetWebRequest(Uri address)
    {
        var request = (HttpWebRequest)base.GetWebRequest(address);
        request.CookieContainer = CookieContainer;
        return request;
    }
}

次に、以下を送信します。

使用 (var client = new CookieAwareWebClient())

using (var client = new CookieAwareWebClient())
{
    var values = new NameValueCollection
    {
        {"username", "usr" },
        {"password", "(passw0rd!)"}, //don't worry. not actual information
    };

    //This should bring me to the login page, which will upload the values I have given
    client.UploadValues("https://site.com/page.php?var1=value1&var2=value2", values);

    string result = client.DownloadString("https://site.com/page.php?var1=value1&var2=value2");

残念ながら、これでも CAS にログインできず、結果は CAS の HTML として返されます。

これを修正する方法を知っている人はいますか? ご協力ありがとうございました。

4

1 に答える 1

0

CAS がデフォルトで標準の HTTP 認証をサポートしているかどうかはわかりません。通常はフォームベースです。

CAS にリダイレクトされた後、いくつかの非表示のフォーム変数についてページを解析/スクレイピングする必要があります。これらのパラメーター、ユーザー名、およびパスワードを (GET 要求で返された Cookie と共に) POST します。

CAS は HTTP リダイレクトを返す必要があります。(コレクションには追加の Cookie が追加されます: CASTGC Cookie。) Web クライアントは、最初に要求されたリソースにリダイレクトする必要があります。一部のアプリでは、元に戻すために 2 つのホップが必要になる場合があります。

Web アプリケーションのセッションの有効期間内にリソースをポーリングする場合は、同じ CookieCollection を使用して後続の呼び出しを行い、CAS に対して再度認証する必要はありません。

于 2013-08-30T21:14:23.947 に答える