Laravel AT Protocol Client (alpha & unstable)

Add client assertion support to OAuth PAR and token exchange

Changed files
+21 -16
src
+21 -16
src/Auth/OAuthEngine.php
··· 17 17 protected DPoPKeyManager $dpopManager, 18 18 protected ClientMetadataManager $metadata, 19 19 protected DPoPClient $dpopClient, 20 + protected ClientAssertionManager $clientAssertion, 20 21 ) {} 21 22 22 23 /** ··· 87 88 88 89 $response = $this->dpopClient->request($request->pdsEndpoint, $tokenUrl, 'POST', $request->dpopKey) 89 90 ->asForm() 90 - ->post($tokenUrl, [ 91 - 'grant_type' => 'authorization_code', 92 - 'code' => $code, 93 - 'redirect_uri' => $this->metadata->getRedirectUris()[0] ?? null, 94 - 'client_id' => $this->metadata->getClientId(), 95 - 'code_verifier' => $request->codeVerifier, 96 - ]); 91 + ->post($tokenUrl, array_merge( 92 + $this->clientAssertion->getAuthParams($request->pdsEndpoint), 93 + [ 94 + 'grant_type' => 'authorization_code', 95 + 'code' => $code, 96 + 'redirect_uri' => $this->metadata->getRedirectUris()[0] ?? null, 97 + 'code_verifier' => $request->codeVerifier, 98 + ] 99 + )); 97 100 98 101 if ($response->failed()) { 99 102 throw new AuthenticationException('Token exchange failed: '.$response->body()); ··· 120 123 121 124 $response = $this->dpopClient->request($pdsEndpoint, $parUrl, 'POST', $dpopKey) 122 125 ->asForm() 123 - ->post($parUrl, [ 124 - 'client_id' => $this->metadata->getClientId(), 125 - 'redirect_uri' => $this->metadata->getRedirectUris()[0] ?? null, 126 - 'response_type' => 'code', 127 - 'scope' => implode(' ', $scopes), 128 - 'code_challenge' => $codeChallenge, 129 - 'code_challenge_method' => 'S256', 130 - 'state' => $state, 131 - ]); 126 + ->post($parUrl, array_merge( 127 + $this->clientAssertion->getAuthParams($pdsEndpoint), 128 + [ 129 + 'redirect_uri' => $this->metadata->getRedirectUris()[0] ?? null, 130 + 'response_type' => 'code', 131 + 'scope' => implode(' ', $scopes), 132 + 'code_challenge' => $codeChallenge, 133 + 'code_challenge_method' => 'S256', 134 + 'state' => $state, 135 + ] 136 + )); 132 137 133 138 if ($response->failed()) { 134 139 throw new AuthenticationException('PAR failed: '.$response->body());