Attivazione autenticazione LDAP con registrazione utenti in DB

This commit is contained in:
Amministratore 2022-07-07 12:22:19 +02:00
parent 9c65d864c9
commit 9bfb9a1903
11 changed files with 218 additions and 9 deletions

View File

@ -5,6 +5,7 @@ namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller; use App\Http\Controllers\Controller;
use App\Providers\RouteServiceProvider; use App\Providers\RouteServiceProvider;
use Illuminate\Foundation\Auth\AuthenticatesUsers; use Illuminate\Foundation\Auth\AuthenticatesUsers;
use Illuminate\Http\Request;
class LoginController extends Controller class LoginController extends Controller
{ {
@ -37,4 +38,12 @@ class LoginController extends Controller
{ {
$this->middleware('guest')->except('logout'); $this->middleware('guest')->except('logout');
} }
protected function credentials(Request $request)
{
return [
'mail' => $request->email,
'password'=>$request->password,
];
}
} }

View File

@ -54,6 +54,6 @@ class CategorieController extends Controller
public function apiList() public function apiList()
{ {
$categorie=DB::table('categories')->orderBy('cat_name')->get(); $categorie=DB::table('categories')->orderBy('cat_name')->get();
return json_encode($categorie); return response()->json($categorie);
} }
} }

View File

@ -0,0 +1,21 @@
<?php
namespace App\Ldap\Rules;
use LdapRecord\Laravel\Auth\Rule;
class OnlyInGroupUsers extends Rule
{
/**
* Check if the rule passes validation.
*
* @return bool
*/
public function isValid()
{
//
return $this->user->groups()->exists(
env('LDAP_GROUP_ACCESS')
);
}
}

15
app/Ldap/User.php Normal file
View File

@ -0,0 +1,15 @@
<?php
namespace App\Ldap;
use LdapRecord\Models\Model;
class User extends Model
{
/**
* The object classes of the LDAP model.
*
* @var array
*/
public static $objectClasses = [];
}

View File

@ -4,13 +4,16 @@ namespace App\Models;
use Illuminate\Contracts\Auth\MustVerifyEmail; use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Foundation\Auth\User as Authenticatable; use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable; use Illuminate\Notifications\Notifiable;
use Laravel\Sanctum\HasApiTokens; use Laravel\Sanctum\HasApiTokens;
//use LdapRecord\Laravel\Auth\Authenticatable;
use LdapRecord\Laravel\Auth\AuthenticatesWithLdap;
class User extends Authenticatable class User extends Authenticatable
{ {
use HasApiTokens, HasFactory, Notifiable; use HasApiTokens, HasFactory, Notifiable, AuthenticateswithLdap;
/** /**
* The attributes that are mass assignable. * The attributes that are mass assignable.
@ -41,4 +44,14 @@ class User extends Authenticatable
protected $casts = [ protected $casts = [
'email_verified_at' => 'datetime', 'email_verified_at' => 'datetime',
]; ];
public function getLdapDomainColumn()
{
return 'domain';
}
public function getLdapGuidColumn()
{
return 'guid';
}
} }

View File

@ -12,6 +12,7 @@
"barryvdh/laravel-dompdf": "^1.0", "barryvdh/laravel-dompdf": "^1.0",
"consoletvs/charts": "7.*", "consoletvs/charts": "7.*",
"directorytree/ldaprecord": "^2.9", "directorytree/ldaprecord": "^2.9",
"directorytree/ldaprecord-laravel": "^2.5",
"fruitcake/laravel-cors": "^2.0", "fruitcake/laravel-cors": "^2.0",
"guzzlehttp/guzzle": "^7.0.1", "guzzlehttp/guzzle": "^7.0.1",
"laravel-notification-channels/telegram": "^2.0", "laravel-notification-channels/telegram": "^2.0",

66
composer.lock generated
View File

@ -4,7 +4,7 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically" "This file is @generated automatically"
], ],
"content-hash": "a4647119c1cdf9d566876ae0272f6a00", "content-hash": "857d84837771f902ec95cd06212b55f5",
"packages": [ "packages": [
{ {
"name": "barryvdh/laravel-dompdf", "name": "barryvdh/laravel-dompdf",
@ -466,6 +466,70 @@
], ],
"time": "2022-02-17T18:35:49+00:00" "time": "2022-02-17T18:35:49+00:00"
}, },
{
"name": "directorytree/ldaprecord-laravel",
"version": "v2.5.6",
"source": {
"type": "git",
"url": "https://github.com/DirectoryTree/LdapRecord-Laravel.git",
"reference": "75ba6b5a981fa1e9f1ad6c2233ea4f73078f8d66"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/DirectoryTree/LdapRecord-Laravel/zipball/75ba6b5a981fa1e9f1ad6c2233ea4f73078f8d66",
"reference": "75ba6b5a981fa1e9f1ad6c2233ea4f73078f8d66",
"shasum": ""
},
"require": {
"directorytree/ldaprecord": "^2.4.4",
"ext-ldap": "*",
"illuminate/support": "^5.6|^6.0|^7.0|^8.0|^9.0",
"php": ">=7.3",
"ramsey/uuid": "*"
},
"require-dev": {
"mockery/mockery": "^1.0",
"orchestra/testbench": "^3.7|^4.0|^5.0|^6.0|^7.0",
"phpunit/phpunit": "^7.0|^8.0|^9.0",
"spatie/ray": "^1.28"
},
"type": "project",
"extra": {
"laravel": {
"providers": [
"LdapRecord\\Laravel\\LdapServiceProvider",
"LdapRecord\\Laravel\\LdapAuthServiceProvider"
]
}
},
"autoload": {
"psr-4": {
"LdapRecord\\Laravel\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"description": "LDAP Authentication & Management for Laravel.",
"keywords": [
"adldap2",
"laravel",
"ldap",
"ldaprecord"
],
"support": {
"issues": "https://github.com/DirectoryTree/LdapRecord-Laravel/issues",
"source": "https://github.com/DirectoryTree/LdapRecord-Laravel/tree/v2.5.6"
},
"funding": [
{
"url": "https://github.com/stevebauman",
"type": "github"
}
],
"time": "2022-05-11T13:35:40+00:00"
},
{ {
"name": "doctrine/inflector", "name": "doctrine/inflector",
"version": "2.0.4", "version": "2.0.4",

View File

@ -38,7 +38,7 @@ return [
'guards' => [ 'guards' => [
'web' => [ 'web' => [
'driver' => 'session', 'driver' => 'session',
'provider' => 'users', 'provider' => 'ldap', //'users',
], ],
], ],
@ -60,9 +60,20 @@ return [
*/ */
'providers' => [ 'providers' => [
'users' => [ 'ldap' => [
'driver' => 'eloquent', 'driver' => 'ldap', //'eloquent',
'model' => App\Models\User::class, 'model' => LdapRecord\Models\ActiveDirectory\User::class, //App\Models\User::class,
'rules' => [
App\Ldap\Rules\OnlyInGroupUsers::class,
],
'database' => [
'model' => App\Models\User::class,
'sync_passwords'=> false,
'sync_attributes' => [
'name' => 'displayname',
'email' => 'mail',
],
],
], ],
// 'users' => [ // 'users' => [

73
config/ldap.php Normal file
View File

@ -0,0 +1,73 @@
<?php
return [
/*
|--------------------------------------------------------------------------
| Default LDAP Connection Name
|--------------------------------------------------------------------------
|
| Here you may specify which of the LDAP connections below you wish
| to use as your default connection for all LDAP operations. Of
| course you may add as many connections you'd like below.
|
*/
'default' => env('LDAP_CONNECTION', 'default'),
/*
|--------------------------------------------------------------------------
| LDAP Connections
|--------------------------------------------------------------------------
|
| Below you may configure each LDAP connection your application requires
| access to. Be sure to include a valid base DN - otherwise you may
| not receive any results when performing LDAP search operations.
|
*/
'connections' => [
'default' => [
'hosts' => [env('LDAP_HOST', '127.0.0.1')],
'username' => env('LDAP_USERNAME', 'cn=user,dc=local,dc=com'),
'password' => env('LDAP_PASSWORD', 'secret'),
'port' => env('LDAP_PORT', 389),
'base_dn' => env('LDAP_BASE_DN', 'dc=local,dc=com'),
'timeout' => env('LDAP_TIMEOUT', 5),
'use_ssl' => env('LDAP_SSL', false),
'use_tls' => env('LDAP_TLS', false),
],
],
/*
|--------------------------------------------------------------------------
| LDAP Logging
|--------------------------------------------------------------------------
|
| When LDAP logging is enabled, all LDAP search and authentication
| operations are logged using the default application logging
| driver. This can assist in debugging issues and more.
|
*/
'logging' => env('LDAP_LOGGING', true),
/*
|--------------------------------------------------------------------------
| LDAP Cache
|--------------------------------------------------------------------------
|
| LDAP caching enables the ability of caching search results using the
| query builder. This is great for running expensive operations that
| may take many seconds to complete, such as a pagination request.
|
*/
'cache' => [
'enabled' => env('LDAP_CACHE', false),
'driver' => env('CACHE_DRIVER', 'file'),
],
];

View File

@ -16,6 +16,8 @@ class CreateUsersTable extends Migration
Schema::create('users', function (Blueprint $table) { Schema::create('users', function (Blueprint $table) {
$table->id(); $table->id();
$table->string('name'); $table->string('name');
$table->string('guid')->unique()->nullable();
$table->string('domain');
$table->string('email')->unique(); $table->string('email')->unique();
$table->timestamp('email_verified_at')->nullable(); $table->timestamp('email_verified_at')->nullable();
$table->string('password'); $table->string('password');