web-dev-qa-db-ja.com

基本認証HTTPヘッダを使用してWordPressサイトにログインするにはどうすればいいですか?

私はログインユーザーとして自動受け入れテストのいくつかを実行しようとしています。私の受け入れテストは基本的な認証ヘッダを送ることができるGhost Inspectorを使って実行されます。

REST AP​​I用の基本的な認証プラグインがあるので、誰かがより良い解決策でこれに答えるのでなければ、私はどんな要求でも動作するようにそれをハッキングしています。

はい、基本認証はそれほど安全ではありませんが、HTTPSを使用する場合はwp-login - IEと同じくらい安全です。また、これはテストサイトであり、セキュリティを心配する必要はありません。

2
JPollock

determine_current_userフィルターにフックしてHTTP基本認証データを調べてユーザーを返すだけです。

たぶん、おそらく、私は特定のユーザーだけがHTTP認証を介してログインすることを許可するでしょう。

これは、たとえばユーザーオプションを設定することによって実行できます。

コードは次のようになります(OPでテスト済み)。

add_filter( 'determine_current_user', function( $cur_user ) {

    // If user already logged in or no HTTP AUTH info, return
    if ($cur_user || empty($_SERVER['PHP_AUTH_USER']) || empty($_SERVER['PHP_AUTH_PW'])) {
        return $cur_user;
    }

    // If there's no user with given username, return
    $found_user = get_user_by('login', $_SERVER['PHP_AUTH_USER']);
    if (!$found_user) {
        return $cur_user;
    }

    // If password does not match, return
    if ( ! wp_check_password( $_SERVER['PHP_AUTH_PW'], $found_user->user_pass ) ) {
        return $cur_user;
    }

    // Return found user ID only if allowed to login via HTTP in user meta
    return get_user_option( 'http_auth_login_allowed', $found_user->ID )
        ? $found_user->ID
        : $cur_user;

}, 30);

WPはCookieからユーザーをログに記録するために20(IIRC)を使用するので優先順位30を使用しました。

たとえ正直に言っても本番サイトでこれを実行しない場合でも、セキュリティを向上させるためにis_ssl()を要求するためのチェックを追加することができます。しかし、OPがtargetはテストサイトであると言っていることを考えると…これで問題ありません。

3
gmazzap