socialiteproviders / microsoft
Laravel Socialite 的 Microsoft OAuth2 提供程序
Requires
- php: ^8.0
- ext-json: *
- socialiteproviders/manager: ^4.4
README
composer require socialiteproviders/microsoft
安装与基本用法
请参阅基本安装指南,然后按照以下特定提供程序的说明进行操作。
在 config/services.php
中添加配置
'microsoft' => [ 'client_id' => env('MICROSOFT_CLIENT_ID'), 'client_secret' => env('MICROSOFT_CLIENT_SECRET'), 'redirect' => env('MICROSOFT_REDIRECT_URI'), 'proxy' => env('PROXY') // Optional, will be used for all requests ],
添加提供程序事件监听器
Laravel 11+
在 Laravel 11 中,默认的 EventServiceProvider
提供程序已被移除。相反,您可以在 AppServiceProvider
的 boot
方法中使用 Event
面具的 listen
方法添加监听器。
- 注意:除非您使用自己的提供程序覆盖它们,否则您无需为内置的 socialite 提供程序添加任何内容。
Event::listen(function (\SocialiteProviders\Manager\SocialiteWasCalled $event) { $event->extendSocialite('microsoft', \SocialiteProviders\Microsoft\Provider::class); });
Laravel 10 或以下
配置包的监听器以监听 `SocialiteWasCalled` 事件。将事件添加到 app/Providers/EventServiceProvider
中的 listen[]
数组中。有关详细说明,请参阅基本安装指南。
protected $listen = [ \SocialiteProviders\Manager\SocialiteWasCalled::class => [ // ... other providers \SocialiteProviders\Microsoft\MicrosoftExtendSocialite::class.'@handle', ], ];
用法
现在您应该能够像通常使用 Socialite 一样使用此提供程序(假设您已安装了 facade)
return Socialite::driver('microsoft')->redirect();
扩展功能
租户详情
您还可以在检索用户信息的同时检索租户信息,这可能很有用,如果您需要仅允许您的租户/或筛选特定租户。
为此,您首先需要编辑您的 config/services.php
文件,并在您的微软设置数组中包括 'include_tenant_info',如下所示
'microsoft' => [ 'client_id' => env('MICROSOFT_CLIENT_ID'), 'client_secret' => env('MICROSOFT_CLIENT_SECRET'), 'redirect' => env('MICROSOFT_REDIRECT_URI'), 'tenant' => 'common', 'include_tenant_info' => true, ],
注意:如果您使用 'tenant' => env('MICROSOFT_TENANT_ID')
,则应确保您的 .env 文件仍然使用 'common' 作为租户 ID。
默认返回的租户字段是
- ID
- displayName
- city
- country
- countryLetterCode
- state
- street
- verifiedDomains
刷新令牌
默认情况下,Microsoft 不会返回刷新令牌。但是,如果您需要刷新令牌,则需要添加 offline_access
范围。添加范围是在 redirect
方法中完成的,如 Laravel 文档 中所述。
租户类型
以下列出的是 'tenant' 的支持值(由 MS 身份平台定义),可用于控制谁可以登录应用程序。
common
- 用于 Microsoft 帐户和工或学校帐户(最宽容),organizations
- 仅用于工或学校帐户,consumers
- 仅用于 Microsoft 帐户(仅适用于 Xbox、Teams for Life 或 Outlook 等服务),tenant identifiers
- 例如租户 ID 或域名(最严格)。
注意:当使用
tenant => 'common'
include_tenant_info => true
配置 services.php 中的微软条目并尝试使用 'consumer' 帐户登录时,用户的租户值将为 null
例如
$user = Socialite::driver('microsoft')->user();
if ($user->tenant === null) {
// do some consumer/public specific workflow
} else {
// do your work / school tenant workflow
Log::info(sprintf("Tenant found - %s", $user->tenant->displayName));
}
其他租户字段 tenant_fields
任何其他字段都可以通过以下此处详细说明的属性名称返回。
例如,'tenantType', 'technicalNotificationMails'
可以这样请求
'microsoft' => [
'client_id' => env('MICROSOFT_CLIENT_ID'),
'client_secret' => env('MICROSOFT_CLIENT_SECRET'),
'redirect' => env('MICROSOFT_REDIRECT_URI'),
'tenant' => env('MICROSOFT_TENANT_ID', 'common'),
'include_tenant_info' => true,
'tenant_fields' => [ 'tenantType', 'technicalNotificationMails' ],
'include_avatar' => true,
'include_avatar_size' => '648x648',
],