PHP code example of x-laravel / federated-identity

1. Go to this page and download the library: Download x-laravel/federated-identity library. Choose the download type require.

2. Extract the ZIP file and open the index.php.

3. Add this code to the index.php.
    
        
<?php
require_once('vendor/autoload.php');

/* Start to develop here. Best regards https://php-download.com/ */

    

x-laravel / federated-identity example snippets


use XLaravel\FederatedIdentity\Concerns\HasFederatedIdentities;

class User extends Authenticatable implements MustVerifyEmail
{
    use HasFederatedIdentities;
}

'providers' => [
    'google' => [
        'client_ids' => env('FEDERATED_IDENTITY_GOOGLE_CLIENT_IDS', ''),
    ],

    'apple' => [
        'client_ids' => env('FEDERATED_IDENTITY_APPLE_CLIENT_IDS', ''),
        'team_id' => env('FEDERATED_IDENTITY_APPLE_TEAM_ID'),
        'key_id' => env('FEDERATED_IDENTITY_APPLE_KEY_ID'),
        'private_key' => env('FEDERATED_IDENTITY_APPLE_PRIVATE_KEY'),
    ],
],

use XLaravel\FederatedIdentity\Facades\FederatedIdentity;

$providerUser = FederatedIdentity::verifier('google')->verify($request->input('id_token'));

$providerUser->provider;      // "google"
$providerUser->id;            // The provider's user ID ("sub")
$providerUser->audience;      // The client ID the token was issued to
$providerUser->email;
$providerUser->emailVerified;
$providerUser->givenName;
$providerUser->familyName;
$providerUser->avatarUrl;
$providerUser->claims;        // Every claim of the token

$providerUser->name();

if (FederatedIdentity::has($provider)) {
    // ...
}

$providers = FederatedIdentity::providers();

use XLaravel\FederatedIdentity\IdentityResolver;

$user = app(IdentityResolver::class)->find($providerUser);

$resolver = app(IdentityResolver::class);

$user = $resolver->find($providerUser);

if ($user === null && $user = $resolver->match($providerUser)) {
    $resolver->link($user, $providerUser);
}

use App\Models\User;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Str;
use XLaravel\FederatedIdentity\Exceptions\IdentityTakenException;

$user = User::create([
    'name' => $providerUser->name(),
    'email' => $providerUser->email,
    'email_verified_at' => $providerUser->emailVerified ? now() : null,
    'password' => Hash::make(Str::random(40)),
]);

try {
    $resolver->link($user, $providerUser);
} catch (IdentityTakenException $exception) {
    $user->forceDelete();

    $user = $resolver->find($providerUser) ?? throw $exception;
}

$providerUser = FederatedIdentity::verifier('apple')->verify(
    $request->input('id_token'),
    $request->input('nonce'),
);

$providerUser = $providerUser->withName(
    $request->input('given_name'),
    $request->input('family_name'),
);

$identity = $resolver->link($request->user(), $providerUser);

$resolver->unlink($request->user(), 'apple');

if ($resolver->owns($request->user(), $providerUser)) {
    // ...
}

$user->identities;

$identity = $user->identity('google');

if ($user->hasIdentity('apple')) {
    // ...
}

$providerUser = FederatedIdentity::verifier('apple')->verify(
    $request->input('id_token'),
    $request->input('nonce'),
);

FederatedIdentity::revoker('apple')->revoke(
    $providerUser->audience,
    $request->input('authorization_code'),
    $request->input('redirect_uri'),
);

FederatedIdentity::revoker('apple')->revokeToken($clientId, $refreshToken);

$secret = FederatedIdentity::appleClientSecret('apple')->for($clientId);

'providers' => [
    // ...

    'microsoft' => [
        'driver' => 'oidc',
        'issuer' => 'https://login.microsoftonline.com/{tenant-id}/v2.0',
        'jwks_uri' => 'https://login.microsoftonline.com/{tenant-id}/discovery/v2.0/keys',
        'client_ids' => env('FEDERATED_IDENTITY_MICROSOFT_CLIENT_IDS'),
    ],

    'keycloak' => [
        'driver' => 'oidc',
        'label' => 'Company Account',
        'issuer' => 'https://sso.example.com/realms/staff',
        'jwks_uri' => 'https://sso.example.com/realms/staff/protocol/openid-connect/certs',
        'client_ids' => 'mobile-app,web-app',
        'nonce' => true,
    ],
],

use XLaravel\FederatedIdentity\Facades\FederatedIdentity;
use XLaravel\FederatedIdentity\Verifiers\OidcTokenVerifier;

/**
 * Bootstrap any application services.
 */
public function boot(): void
{
    FederatedIdentity::extend('line', function ($app, array $config, string $name) {
        return new OidcTokenVerifier(
            name: $name,
            label: 'LINE',
            keys: FederatedIdentity::keySet($name, 'https://api.line.me/oauth2/v2.1/certs'),
            issuers: ['https://access.line.me'],
            clientIds: [$config['channel_id']],
        );
    });
}

'provider' => 'identity-users',
shell
php artisan vendor:publish --tag=federated-identity-migrations

php artisan migrate