socialiteproviders/microsoft-azure

适用于 Laravel Socialite 的 Microsoft Azure OAuth2 提供程序

5.2.0 2024-03-15 03:02 UTC

This package is auto-updated.

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


README

composer require socialiteproviders/microsoft-azure

安装与基本用法

请参阅基本安装指南,然后按照以下提供程序的特定说明进行操作。

config/services.php 中添加配置

'azure' => [    
  'client_id' => env('AZURE_CLIENT_ID'),
  'client_secret' => env('AZURE_CLIENT_SECRET'),
  'redirect' => env('AZURE_REDIRECT_URI'),
  'tenant' => env('AZURE_TENANT_ID'),
  'proxy' => env('PROXY')  // optionally
],

添加提供程序事件监听器

Laravel 11+

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

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

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

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

用法

现在您应该能够像常规使用 Socialite 一样使用此提供程序(假设您已安装门面)。

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

要退出您的应用程序和 Azure

public function logout(Request $request) 
{
     Auth::guard()->logout();
     $request->session()->flush();
     $azureLogoutUrl = Socialite::driver('azure')->getLogoutUrl(route('login'));
     return redirect($azureLogoutUrl);
}

返回的用户字段

  • id
  • name
  • email

高级用法

为了在 Azure 上有多个/不同的活动目录(即多个租户),可以使用相同的驱动程序,但配置不同。

/**
 * Returns a custom config for this specific Azure AD connection / directory
 * @return \SocialiteProviders\Manager\Config
 */
function getConfig(): \SocialiteProviders\Manager\Config
{
  return new \SocialiteProviders\Manager\Config(
    env('AD_CLIENT_ID', 'some-client-id'), // a different clientID for this separate Azure directory
    env('AD_CLIENT_SECRET'), // a different secret for this separate Azure directory
    url(env('AD_REDIRECT_PATH', '/azuread/callback')), // the redirect path i.e. a different callback to the other azureAD callbacks
    ['tenant' => env('AD_TENANT_ID', 'common')], // this could be something special if need be, but can also be left out entirely
  );
}
//....//
Socialite::driver('azure')
    ->setConfig(getConfig())
    ->redirect();

这也适用于获取用户凭证的回调,必须记住注入 ->setConfig($config) 方法,即:

$socialUser = Socialite::driver('azure')
    ->setConfig(getConfig())
    ->user();

如果您正在验证的应用程序不是单个租户,请使用以下值替换 client_id

  • 多租户应用程序:"organizations"
  • 多租户和个人账户:"common"
  • 仅个人账户:"consumers"