Rabu, 25 September 2024

OTP-keycloack ssh dg oauth2

 

Anda dapat menggunakan koneksi SSH dengan metode autentikasi OAuth2 untuk terhubung ke Keycloak dengan SSH. Ini mengharuskan Anda membuat pasangan kunci SSH dan mendaftarkannya di akun Keycloak Anda. Anda kemudian perlu mengonfigurasi klien SSH Anda untuk menggunakan metode autentikasi OAuth2. Setelah mengonfigurasi klien SSH Anda, Anda kemudian dapat membuat koneksi SSH dengan Keycloak menggunakan metode autentikasi OAuth2.

Otentikasi PAM Linux

PAM adalah « Pluggable Authentication Modules ». Ini adalah antarmuka dan beberapa pustaka untuk mengautentikasi pengguna dalam sistem menggunakan implementasi lain. http://www.linux-pam.org/whatispam.html

Dengan mekanisme ini, implementasi lain tersedia di seluruh web. Beginilah cara Anda dapat menghubungkan mesin Linux ke direktori LDAP misalnya. Google telah menerbitkan modul PAM yang menunjukkan autentikasi dua faktor: https://github.com/google/google-authenticator-libpam .

Kita dapat menemukan banyak modul PAM yang terhubung ke server oauth2:

Aliran perangkat

aliran perangkat masih dalam status draft https://tools.ietf.org/html/draft-ietf-oauth-device-flow-15

Alur ini dirancang untuk terminal di mana pengguna tidak dapat berinteraksi secara langsung (atau dengan interaksi rendah seperti TV pintar) atau perangkat tanpa peramban web.

  +----------+                                +----------------+
  |          |>---(A)-- Client Identifier --->|                |
  |          |                                |                |
  |          |<---(B)-- Device Code,      ---<|                |
  |          |          User Code,            |                |
  |  Device  |          & Verification URI    |                |
  |  Client  |                                |                |
  |          |  [polling]                     |                |
  |          |>---(E)-- Device Code,      --->|                |
  |          |          & Client Identifier   |                |
  |          |                                |  Authorization |
  |          |<---(F)-- Access Token      ---<|     Server     |
  +----------+   (& Optional Refresh Token)   |                |
        v                                     |                |
        :                                     |                |
       (C) User Code & Verification URI       |                |
        :                                     |                |
        v                                     |                |
  +----------+                                |                |
  | End user |                                |                |
  |    at    |<---(D)-- End user reviews  --->|                |
  |  Browser |          authorization request |                |
  +----------+                                +----------------+

Cara paling umum menggunakan aliran ini (untuk panah « C ») adalah transmisi informasi berbasis kode qr.

Ini adalah alur yang digunakan saat Anda mencoba masuk dari konsol, yaitu dengan baris perintah Microsoft Azure:

Kode tersebut adalah token, yang disebut « Kode pengguna » dalam skema di atas.

Alur ini adalah mahakarya masa depan oauth2. Alur ini dapat menyederhanakan banyak interaksi dan login langsung dengan ponsel pintar ke TV pintar atau peralatan terhubung lainnya. Alur ini benar-benar bekerja seperti sulap!

Contoh yang bagus tersedia di: https://alexbilbie.com/2016/04/oauth-2-device-flow-grant/

Alur kata sandi pemilik sumber daya

Ini adalah cara paling sederhana untuk melakukan autentikasi pada server autentikasi. Aplikasi mengirimkan userid/password (dan client id/client secret) yang dikumpulkan secara langsung ke endpoint /auth. Server OAuth2 merespons dengan access_token.

https://tools.ietf.org/html/rfc6749#section-1.3.3

Seperti yang dikatakan :The credentials should only be used when there is a high degree of trust between the resource owner and the client (e.g., the client is art of the device operating system or a highly privileged application), and when other authorization grant types are not available (such as an authorization code).

Dalam kasus penggunaan ini, kami memiliki kode sumber aplikasi kami sehingga kami dapat memercayainya.

Hubungkan Linux ke oauth2: Alur kata sandi pemilik sumber daya

Konfigurasi Keycloak

Langkah pertama, kita memerlukan server autentikasi. Bisakah Anda menggunakan Google, Facebook, atau Twitter? Tentu saja tidak, mereka tidak memiliki alur sandi pemilik sumber daya yang tersedia karena semua alasan yang dapat kita bayangkan.

Untuk Demo ini, kita akan menggunakan realm keycloak.

Buka ranah yang baru Anda buat. Akun please-open.it Anda akan membuka ranah Anda sebagai admin. Buka klien:

Buat klien baru, IE « raspberry ». « root URL » tidak diperlukan.

Ubah « Access Type » menjadi « rahasia ». Di « Valid Redirect URIs », cukup tambahkan « urn:ietf:wg:oauth:2.0:oob » (kita akan lihat alasannya nanti). Jangan lupa simpan.

Ambil rahasia klien di tab « Kredensial ».

Sekarang buat pengguna « pi ». Jangan lupa untuk menginisialisasi kata sandi untuk pengguna tersebut.

Modul PAM

Memasang

Untuk contoh pertama, kami akan langsung menggunakan https://github.com/shimt/pam-exec-oauth2 .

Pada komputer desktop dengan Go (dan semua jalur diatur dengan benar), buatlah untuk raspberry dengan skrip build-linux-arm.bat. Terima kasih kepada penulis atas perhatian kecil ini!.

Biner gemuk tersedia di direktori bin/linux_arm. Pindahkan ke raspberry pi baru Anda (dengan ssh diaktifkan).

Ikuti saja dokumentasinya:

PREFIX=/opt/pam-exec-oauth2
sudo mkdir $PREFIX
sudo cp go/bin/pam-exec-oauth2 $PREFIX/pam-exec-oauth2
sudo touch $PREFIX/pam-exec-oauth2.yaml
sudo chmod 755 $PREFIX/pam-exec-oauth2
sudo chmod 600 $PREFIX/pam-exec-oauth2.yaml

Sekarang saatnya untuk memaparkan metode autentikasi baru ini.

Dalam dokumentasi yang diberikan, hal ini merujuk pada berkas /etc/pam.d/common-auth. Dalam contoh kami, kami hanya mengaktifkan metode autentikasi ini untuk ssh. Jadi kami akan memodifikasi berkas /etc/pam.d/sshd.

Tambahkan baris (di awal):

auth sufficient pam_exec.so expose_authtok /opt/pam-exec-oauth2/pam-exec-oauth2

Untuk penggunaan ini, kami tidak membuat pengguna lokal secara otomatis. Artinya, Anda perlu memiliki pengguna lokal dengan ID yang sama seperti di oauth.

Konfigurasi

"Redirect-url" dijelaskan di sini: https://stackoverflow.com/questions/46643795/oauth-2-device-flow-redirect-url

Untuk mengambil url, buka realm Anda dan klik pada « Konfigurasi Titik Akhir OpenID ». Anda akan memiliki objek Json yang menunjukkan semua url realm. Dapatkan url autentikasi dan token.

Di dalam berkas/opt/pam-exec-oauth2/pam-exec-oauth2.yaml

{
    client-id: "raspberry",
    client-secret: "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
    redirect-url: "urn:ietf:wg:oauth:2.0:oob",
    scopes: ["openid"],
    endpoint-auth-url: "https://app.please-open.it/auth/realms/xxxxxxxxx/protocol/openid-connect/auth",
    endpoint-token-url: "https://app.please-open.it/auth/realms/xxxxxxxxx/protocol/openid-connect/auth",
    extra-parameters: {
    },
    username-format: "%s",
}

Mulai ulang SSH:/etc/init.d/ssh restart

Sekarang login akun oauth2 Anda diperlukan untuk membuka sesi « pi ».

Tidak ada komentar:

Posting Komentar