Laravel Socialite 的 AzureADB2C OAuth2 提供者

4.4.0 2024-04-16 22:25 UTC

This package is auto-updated.

Last update: 2024-08-26 21:27:23 UTC


README

composer require socialiteproviders/azureadb2c

安装与基本用法

请参阅基础安装指南,然后按照以下特定提供者的说明操作。

config/services.php 中添加配置

'azureadb2c' => [
    'client_id' => env('AADB2C_ClientId'),
    'client_secret' => env('AADB2C_ClientSecret'),
    'redirect' => env('AADB2C_RedirectUri'),
    'domain' => env('AADB2C_Domain'),  // {your_domain}.b2clogin.com
    'policy' => env('AADB2C_Policy'),  // such as 'b2c_1_user_susi'
    'default_algorithm' => env('AADB2C_DefaultAlgorithm', 'RS256'), // decoding algorithm JWK key such as 'RS256'
    'custom_domain' => env('AADB2C_CUSTOM_DOMAIN'), // optional - set to use your custom domain e.g. login.contoso.com
    'tenant' => env('AADB2C_TENANT'), // optional - set to use your tenant ID or custom domain in place of the default onmicrosoft.com one
],

要设置 Azure AD B2C 自定义域,请按照这些说明进行。

添加提供者事件监听器

Laravel 11+

在 Laravel 11 中,默认的 EventServiceProvider 提供者已被移除。相反,您可以在 AppServiceProviderboot 方法中使用 Event 门面上的 listen 方法添加监听器。

  • 注意:除非您用自己的提供者覆盖它们,否则不需要为内置的 Socialite 提供者添加任何内容。
Event::listen(function (\SocialiteProviders\Manager\SocialiteWasCalled $event) {
    $event->extendSocialite('azureadb2c', \SocialiteProviders\AzureADB2C\Provider::class);
});
Laravel 10 或以下配置包的监听器以监听 `SocialiteWasCalled` 事件。

将事件添加到 app/Providers/EventServiceProvider 中的 listen[] 数组中。有关详细说明,请参阅基础安装指南

protected $listen = [
    \SocialiteProviders\Manager\SocialiteWasCalled::class => [
        // ... other providers
        \SocialiteProviders\AzureADB2C\AzureADB2CExtendSocialite::class.'@handle',
    ],
];

用法

现在您应该能够像平时使用 Socialite 一样使用此提供者(假设您已安装门面)

重定向到 Azure AD B2C

return Socialite::driver('azureadb2c')->redirect();

回调

$provided_user = Socialite::driver('azureadb2c')->user();

注销

return redirect(Socialite::driver('azureadb2c')->logout('http://localhost'));

返回的用户字段

  • sub
  • name

注意)如果您想添加声明映射,请更改 User::setRaw() 函数。声明映射必须与 Azure AD B2C 返回的 id_token 中的声明匹配。

    public function setRaw($user)
    {
        $user['name'] = $user['name'] ?: $user['given_name'].' '.$user['family_name'];
        $user['nickname'] = $user['name'] ?: '';
        $user['email'] = $user['emails'][0];

        return parent::setRaw($user);
    }