]> BookStack Code Mirror - bookstack/commitdiff
OIDC: Moved name claim option handling from config to service
authorDan Brown <redacted>
Mon, 11 Sep 2023 10:50:58 +0000 (11:50 +0100)
committerDan Brown <redacted>
Mon, 11 Sep 2023 10:50:58 +0000 (11:50 +0100)
Closes #4494

app/Access/Oidc/OidcService.php
app/Config/oidc.php
tests/Auth/OidcTest.php

index d22b26eec67b5f6ae9b74acceacdc1e3bd0e807d..8778cbd98c2e5dcfc17e923368eb7626e0838146 100644 (file)
@@ -142,10 +142,11 @@ class OidcService
      */
     protected function getUserDisplayName(OidcIdToken $token, string $defaultValue): string
     {
-        $displayNameAttr = $this->config()['display_name_claims'];
+        $displayNameAttrString = $this->config()['display_name_claims'] ?? '';
+        $displayNameAttrs = explode('|', $displayNameAttrString);
 
         $displayName = [];
-        foreach ($displayNameAttr as $dnAttr) {
+        foreach ($displayNameAttrs as $dnAttr) {
             $dnComponent = $token->getClaim($dnAttr) ?? '';
             if ($dnComponent !== '') {
                 $displayName[] = $dnComponent;
index 1f73fb688662e8b72ea69700af2f1d4fa7138e31..b28b8a41a826a8faf5df82767206aa0d350df752 100644 (file)
@@ -9,7 +9,7 @@ return [
     'dump_user_details' => env('OIDC_DUMP_USER_DETAILS', false),
 
     // Claim, within an OpenId token, to find the user's display name
-    'display_name_claims' => explode('|', env('OIDC_DISPLAY_NAME_CLAIMS', 'name')),
+    'display_name_claims' => env('OIDC_DISPLAY_NAME_CLAIMS', 'name'),
 
     // Claim, within an OpenID token, to use to connect a BookStack user to the OIDC user.
     'external_id_claim' => env('OIDC_EXTERNAL_ID_CLAIM', 'sub'),
index 367e84816fa4d926b5a10676820fc96bf424b0ba..204a3bb5f960243e99ff30cc3f1427759b6a9470 100644 (file)
@@ -30,7 +30,7 @@ class OidcTest extends TestCase
             'auth.method'                 => 'oidc',
             'auth.defaults.guard'         => 'oidc',
             'oidc.name'                   => 'SingleSignOn-Testing',
-            'oidc.display_name_claims'    => ['name'],
+            'oidc.display_name_claims'    => 'name',
             'oidc.client_id'              => OidcJwtHelper::defaultClientId(),
             'oidc.client_secret'          => 'testpass',
             'oidc.jwt_public_key'         => $this->keyFilePath,
@@ -408,6 +408,23 @@ class OidcTest extends TestCase
         $this->assertEquals('xXBennyTheGeezXx', $user->external_auth_id);
     }
 
+    public function test_auth_uses_mulitple_display_name_claims_if_configured()
+    {
+        config()->set(['oidc.display_name_claims' => 'first_name|last_name']);
+
+        $this->runLogin([
+            'email'      => 'benny@example.com',
+            'sub'        => 'benny1010101',
+            'first_name' => 'Benny',
+            'last_name'  => 'Jenkins'
+        ]);
+
+        $this->assertDatabaseHas('users', [
+            'name' => 'Benny Jenkins',
+            'email' => 'benny@example.com',
+        ]);
+    }
+
     public function test_login_group_sync()
     {
         config()->set([
Morty Proxy This is a proxified and sanitized view of the page, visit original site.