Skip to content

Commit 7675f4f

Browse files
committed
add code challenge to provider
1 parent c7c2dc1 commit 7675f4f

File tree

1 file changed

+20
-10
lines changed

1 file changed

+20
-10
lines changed

src/MsGraph.php

Lines changed: 20 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -111,20 +111,23 @@ public function connect(?string $id = null): Redirector|RedirectResponse
111111
}
112112

113113
if (! request()->has('code') && ! $this->isConnected($id)) {
114-
$codeVerifier = bin2hex(random_bytes(32));
115-
$codeChallenge = rtrim(
116-
strtr(base64_encode(hash('sha256', $codeVerifier, true)), '+/', '-_'), '='
117-
);
118-
119-
return redirect($provider->getAuthorizationUrl([
120-
'code_challenge' => $codeChallenge,
121-
'code_challenge_method' => 'S256',
122-
]));
114+
return redirect($provider->getAuthorizationUrl());
123115
}
124116

125117
if (request()->has('code')) {
126118

127-
$accessToken = $provider->getAccessToken('authorization_code', ['code' => request('code')]);
119+
try {
120+
$accessToken = $provider->getAccessToken('authorization_code', ['code' => request('code')]);
121+
} catch (IdentityProviderException $e) {
122+
123+
$response = $e->getResponseBody();
124+
125+
$errorMessage = "{$response['error']} {$response['error_description']}\n".
126+
'Error Code: '.($response['error_codes'][0] ?? 'N/A')."\n".
127+
"More Info: {$response['error_uri']}";
128+
129+
throw new Exception($errorMessage);
130+
}
128131

129132
if (auth()->check()) {
130133
$this->storeToken(
@@ -342,6 +345,9 @@ protected function getUserId(?string $id = null): ?string
342345
protected function getProvider(): GenericProvider
343346
{
344347
app()->singleton(GenericProvider::class, function () {
348+
349+
$codeVerifier = bin2hex(random_bytes(32));
350+
345351
return new GenericProvider([
346352
'clientId' => config('msgraph.clientId'),
347353
'clientSecret' => config('msgraph.clientSecret'),
@@ -350,6 +356,10 @@ protected function getProvider(): GenericProvider
350356
'urlAccessToken' => config('msgraph.urlAccessToken'),
351357
'urlResourceOwnerDetails' => config('msgraph.urlResourceOwnerDetails'),
352358
'scopes' => config('msgraph.scopes'),
359+
'code_challenge_method' => 'S256',
360+
'code_challenge' => rtrim(
361+
strtr(base64_encode(hash('sha256', $codeVerifier, true)), '+/', '-_'), '='
362+
),
353363
]);
354364
});
355365

0 commit comments

Comments
 (0)