socialiteproviders/microsoft-azure
Laravel Socialite provider for Microsoft Azure (Entra ID) OAuth login. Configure client ID, secret and tenant to sign users in, retrieve their id, name and email, support multiple tenants, and generate Azure logout URLs.
composer require socialiteproviders/microsoft-azure
Please see the Base Installation Guide, then follow the provider specific instructions below.
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
'graph_url' => env('AZURE_GRAPH_URL'), // optionally, defaults to https://graph.microsoft.com/v1.0/me; only set to trusted endpoints because access tokens are sent here, especially when using mocks
],
In Laravel 11, the default EventServiceProvider provider was removed. Instead, add the listener using the listen method on the Event facade, in your AppServiceProvider boot method.
Event::listen(function (\SocialiteProviders\Manager\SocialiteWasCalled $event) {
$event->extendSocialite('azure', \SocialiteProviders\Azure\Provider::class);
});
Add the event to your listen[] array in app/Providers/EventServiceProvider. See the Base Installation Guide for detailed instructions.
protected $listen = [
\SocialiteProviders\Manager\SocialiteWasCalled::class => [
// ... other providers
\SocialiteProviders\Azure\AzureExtendSocialite::class.'@handle',
],
];
You should now be able to use the provider like you would regularly use Socialite (assuming you have the facade installed):
return Socialite::driver('azure')->redirect();
To logout of your app and Azure:
public function logout(Request $request)
{
Auth::guard()->logout();
$request->session()->flush();
$azureLogoutUrl = Socialite::driver('azure')->getLogoutUrl(route('login'));
return redirect($azureLogoutUrl);
}
idnameemailIn order to have multiple / different Active directories on Azure (i.e. multiple tenants) The same driver can be used but with a different config:
/**
* 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();
This also applies to the callback for getting the user credentials that one has to remember to inject the ->setConfig($config)-method i.e.:
$socialUser = Socialite::driver('azure')
->setConfig(getConfig())
->user();
If the application that you are authenticating against is anything other single tenant, use the following values in place of the tenant_id:
How can I help you explore Laravel packages today?