# Dokumentasi Django 4.2.9.dev20231204082947

# Bagaimana mengautentifikasi terhadap basisdata pengguna Django dari Apache

Sejak menjaga banyak otentifikasi basisdata di sinkronasi adalah masalah utama ketika berhadapan dengan Apache, anda dapat mengkonfigurasi Apache untuk otentifikasi terhadap authentication system Django secara langsung. Ini membutuhkan Apache versi >= 2.2 dan mod_wsgi >= 2.0. Sebagai contoh, anda dapat:

- Melayani berkas statis/media secara langsung dari Apache hanya untuk membuktikan keaslian pengguna.
- Akses otentifikasi pada sebuah gudang Subversion terhadap pengguna Django dengan perizinan tertentu.
- Mengizinkan pengguna tertentu untuk terhubung ke berbagi WebDAV dibuat dengan mod_dav.

Catatan

Jika anda telah memasang custom user model dan ingin menggunakan awalan penangan kesahihan, itu harus mendukung atribut `is_active`. Jika anda ingin menggunakan otorisasi berdasarkan kelompok, pengguna penyesuaian anda harus mempunyai hubungan bernama 'groups', mengacu ke obyek terkait yang mempunyai nama ''name''. Anda dapat juga menentukan penangan otentifikasi mod_wsgi penyesuaian anda jika penyesuaian anda tidak sesuai pada persyaratan ini.

## Pembuktian keaslian dengan `mod_wsgi`

Catatan

Penggunaan dari `WSGIApplicationGroup %{GLOBAL}` di konfigurasi dibawah menganggap bahwa instance Apache anda sedang menjalankan hanya satu aplikasi Django. Jika anda sedang menjalankan lebih dari satu aplikasi Django, silahkan mengacu pada bagian Defining Application Groups dari dokumen mod_wsgi untuk informasi lebih tentang pengaturan ini.

Pastikan bahwa mod_wsgi terpasang dan aktif dan anda telah mengikuti langkah-langkah untuk menyetel Apache with mod_wsgi.

Selanjutnya, sunting konfigurasi Apache anda untuk menambahkan tempat yang anda ingin dibuktikan keaslian pengguna untuk dapat melihat:

    WSGIScriptAlias / /path/to/mysite.com/mysite/wsgi.py
    WSGIPythonPath /path/to/mysite.com

    WSGIProcessGroup %{GLOBAL}
    WSGIApplicationGroup %{GLOBAL}

    <Location "/secret">
        AuthType Basic
        AuthName "Top Secret"
        Require valid-user
        AuthBasicProvider wsgi
        WSGIAuthUserScript /path/to/mysite.com/mysite/wsgi.py
    </Location>

`WSGIAuthUserScript` yang memerintahkan memberitahu mod_wsgi untuk menjalankan fungsi `check_password` di tulisan wsgi yang lebih khusus, melewati nama pengguna dan sandi yang dia menerimanya dari prompt. Di contoh ini, `WSGIAuthUserScript` adalah sama seperti `WSGIScriptAlias` yang menentukan aplikasi anda yang dibuat oleh django-admin startproject.

Menggunakan Apache 2.2 dengan pembuktian keaslian

Pastikan bahwa `mod_auth_basic` and `mod_authz_user` dimuat.

Ini mungkin disusun secara tetap kedalam Apache, atau anda mungkin butuh menggunakan LoadModule untuk memuat mereka secara dinamis dalam `httpd.conf` anda:

    LoadModule auth_basic_module modules/mod_auth_basic.so
    LoadModule authz_user_module modules/mod_authz_user.so

Akhirnya sunting tulisan WSGI anda `mysite.wsgi` ke pembuktian keaslian Apache ke mekanisme pembuktian keaslian situs anda dengan mengimpor fungsi `check_password`:

    import os

    os.environ["DJANGO_SETTINGS_MODULE"] = "mysite.settings"

    from django.contrib.auth.handlers.modwsgi import check_password

    from django.core.handlers.wsgi import WSGIHandler

    application = WSGIHandler()

Permintaan dimulai dengan `/secret/` akan sekarang membutuhkan pengguna untuk dibuktikan keasliannya.

mod_wsgi dokumentasi mekanisme kendali akses menyediakan tambahan rincian dan informasi tentang cara lain dari pembuktian keaslian.

### Otorisasi dengan `mod_wsgi` dan kelompok Django

mod_wsgi juga menyediakan fungsi untuk membatasi sebagian tempat untuk anggota kelompok.

Dalam kasus ini, konfigurasi Apache harus kelihatan seperti ini:

    WSGIScriptAlias / /path/to/mysite.com/mysite/wsgi.py

    WSGIProcessGroup %{GLOBAL}
    WSGIApplicationGroup %{GLOBAL}

    <Location "/secret">
        AuthType Basic
        AuthName "Top Secret"
        AuthBasicProvider wsgi
        WSGIAuthUserScript /path/to/mysite.com/mysite/wsgi.py
        WSGIAuthGroupScript /path/to/mysite.com/mysite/wsgi.py
        Require group secret-agents
        Require valid-user
    </Location>

Untuk mendukung perintah `WSGIAuthGroupScript`, tulisan WSGI sama `mysite.wsgi` harus juga mengimpor fungsi `groups_for_user` yang mengembalikan daftar kelompok milik pengguna yang diberikan.

    from django.contrib.auth.handlers.modwsgi import check_password, groups_for_user

Permintaan untuk `/secret/` akan juga membutuhkan pengguna menjadi anggota dari kelompok "secret-agents".