Skip to content

OAuth setup simplification #26

@thekid

Description

@thekid

Currently, this is the typical code setup inside a web applications' routes() method:

use web\auth\SessionBased;
use web\auth\oauth\{OAuth2Flow, BySecret};

$flow= new OAuth2Flow(
  'http://localhost:8443/oauth/common/authorize',
  'http://localhost:8443/oauth/common/token',
  new BySecret('613aacd1f95ce7ee1b04', '...'),
  '/',
  ['user'],
);
$auth= new SessionBased($flow, $sessions, function($client) use($users) {
  $me= $client->fetch('http://localhost:8443/graph/me')->value();
  return $users->upsert([
    'handle' => $me['id'],
    'name'   => $me['name'],
    // continues mapping fields, shortened for brevity
  ]);
});

return ['/' => $auth->required($frontend)];

If I want to make this configurable and integrate well with several services, there's a lot to do:

  • 2 separate URLs for authorize and token endpoints
  • Another one to choose between the credentials using BySecret (client ID and secret) or ByCertificate (client ID, thumbprint and certificate)
  • Depending on the above, 2 or 3 more configuration values for the credentials
  • An additional one for the scopes
  • Another one for the userinfo endpoint
  • ...and finally something to map the fields returned by this userinfo endpoint

👉 This boils down to almost 10 configuration options that have to be set in order to get an OAuth workflow running!

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions