socialiteproviders / microsoft-azure
适用于 Laravel Socialite 的 Microsoft Azure OAuth2 提供程序
5.2.0
2024-03-15 03:02 UTC
Requires
- php: ^8.0
- ext-json: *
- socialiteproviders/manager: ^4.4
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
提供程序已被移除。相反,您需要在 AppServiceProvider
的 boot
方法中使用 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"