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 にアクセスすると、セッションが失われます。理由はわかりません。
なぜこれが起こっているのかを理解するのを手伝ってください。
前もって感謝します。