2

PHP で OpenID Connect ライブラリを使用しようとしています。これをダウンロードしてテストしました: https://github.com/jumbojett/OpenID-Connect-PHP

それは完全に機能しましたが、その後、Laravel 5.4 プロジェクトを開始し、ライブラリを追加しました。私の考えは、ミドルウェアを使用してユーザーをライブラリにリダイレクトし、「管理者」ページが要求されたときにユーザーを認証することです。

しかし、プログラムが「リダイレクト」メソッドに到達すると、セッションが失われます。これは、Laravel を使用していないときには発生しませんでした。

これは web.php ファイルです

    Route::group(['middlware' => 'web', 'auth'], function () {

    Route::get('admin', 'KeycloakController@auth');

});

これはkernel.phpファイルです

protected $middlewareGroups = [
        'web' => [
            \MiddlewareTest\Http\Middleware\EncryptCookies::class,
            \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
            \Illuminate\Session\Middleware\StartSession::class,
            // \Illuminate\Session\Middleware\AuthenticateSession::class,
            \Illuminate\View\Middleware\ShareErrorsFromSession::class,
            \MiddlewareTest\Http\Middleware\VerifyCsrfToken::class,
            \Illuminate\Routing\Middleware\SubstituteBindings::class,
        ],

        'api' => [
            'throttle:60,1',
            'bindings',
        ],


          'auth' => [

            'keycloak' => \MiddlewareTest\Http\Middleware\Keycloak::class,
         ],
    ];

コントローラーに到達したら、別のクラスからこのメソッドを呼び出します

 private function requestAuthorization() {

        $auth_endpoint = $this->getProviderConfigValue("authorization_endpoint");
        $response_type = "code";

        // Generate and store a nonce in the session
        // The nonce is an arbitrary value
        $nonce = $this->generateRandString();
        Session::put('openid_connect_nonce', $nonce);

        // State essentially acts as a session key for OIDC
        $state = $this->generateRandString();
        Session::put('openid_connect_state', $state);


        Session::save();
        \Log::info(session('openid_connect_state'));

        $auth_params = array_merge($this->authParams, array(
            'response_type' => $response_type,
            'redirect_uri' => $this->getRedirectURL(),
            'client_id' => $this->clientID,
            'nonce' => $nonce,
            'state' => $state,
            'scope' => 'openid'
            ));

        // If the client has been registered with additional scopes
        if (sizeof($this->scopes) > 0) {
            $auth_params = array_merge($auth_params, array('scope' => implode(' ', $this->scopes)));
        }

        $auth_endpoint .= '?' . http_build_query($auth_params, null, '&');

        $this->redirect($auth_endpoint);

    }

しかし、ブラウザが「リダイレクト」メソッドでその URL にアクセスすると、セッションが失われます。理由はわかりません。

なぜこれが起こっているのかを理解するのを手伝ってください。

前もって感謝します。

4

0 に答える 0