Keycloak'ı gerçek dünyada yapılandırma ve kullanma hakkındaki iki bölümlük dizimize tekrar hoş geldiniz . Bu bölümde, Bölüm 1'de yapılandırdığımız Keycloak kurulumunu nodejs ekspres uygulamasında kullanmaya daha fazla odaklanacağım .
Şimdi, web geliştirmeye başladığımdan beri uzun süredir javascript kullanıyorum, bu yüzden bir nodejs uygulamasıyla entegrasyonu kolay buldum. Öte yandan, burada bulacağınız kullanımı kolay Java bağdaştırıcıları (çerçeveye özgü) vardır -
Ve diğer programlama dilleri için, temel Keycloak özellikleriyle kolay entegrasyon sağlayan resmi olmayan kitaplıklar var, ancak Keycloak Gatekeeper'ı kullanmanızı tavsiye ederim -
Ayrıca, Keycloak apisini uygulamak ve herhangi bir programlama dilinde özel bir keycloak hizmeti geliştirmek oldukça kolaydır. Diğer programlama dilleriyle entegrasyon kolaylığı veya http (s) protokolü aracılığıyla bash için daha sonra bir API öğreticisi oluşturacağım. Unutmayın, programlama dilleri ve teknoloji kavramlarındaki yeterlilik arttıkça, uygulama özelliklerini daha iyi anladıkça dış kitaplıklara bağımlılığınız azalır. Kitaplıkları kullanmak kötü değil (daha önce de bahsettiğim gibi, gerekmedikçe yeniden icat etmeyin), ancak güvenilmez bakımcılara sahip 3. parti kitaplıklar, iyileştirmelerin kolaylaşması için daha iyi yeniden yazın.
Tamam, bu kadar konuşma yeter, nodejs express uygulamamızı oluşturmaya başlayalım. Öncelikle, sisteminizde kurulu nodejs ve npm'ye ihtiyacınız olacak. İlk olarak, üzerinde çalışılacak bir klasör oluşturun ve birkaç hazır olma komutunu çalıştırın -
$ mkdir keycloak-express $ cd keycloak-express $ npm init $ npm install express ejs express-session keycloak-connect serve-favicon --save
Öğretici sırasında bunların hepsini öğreneceğiz, indeks.js ile başlayalım. Bu, expressjs sunucumuzun giriş noktasıdır. Html gömülü javascript kodlaması için ejs (gömülü javascript) formatını kullanacağız (eski bir kalıbı ejs, ancak kullanımı oldukça kolay ve tıpkı javascript gibi hissediyor).
Temel ekspres sunucu kodunu yazmakla başlayalım -
Ekspres çerçeveyi veya nodejs http sunucusunun nasıl çalıştığını derinlemesine açıklamayacağım, bu bu makalenin kapsamı dışında, ancak anlamak için gerekli olan kodun sadece bazı mantıksal kısımlarını. Sırasıyla "/" ve "/ home" yollarında iki GET rotamız olduğunu gözlemleyin. Nihai hedefimiz, kimliği doğrulanmış bir kullanıcıya ana sayfayı adıyla ve bu ekranda bazı ayrıntılarla birlikte göstermek olacaktır. Home.ejs'in ilk sürümüne bakalım (sadece html gibi düşünün, içinde javascript dahil etme yetenekleri var). Home.ejs böyle görünmeli -
Home.ejs dosyasında, sadece bir kullanıcı nesnesinin varlığını kontrol ediyoruz ve olmaması durumunda kullanıcının oturum açmasını istiyoruz. Henüz giriş mantığını dahil etmedik. Sunucuyu bu noktada çalıştırabilirsiniz -
# node index.js
Bu etkileyici değil .. Ama biraz sabırlı olun, harika kısımlara geçeceğiz. Devam etmeden önce, Keycloak'tan istemci adaptörü yapılandırma dosyasını alalım. İstemciye (ürünüm) gidin, Kurulum sekmesine tıklayın ve Keycloak OIDC JSON seçeneğini seçin .
Bunu, index.js sunucu dosyamızın bitişiğine keycloak.json olarak kaydedin (dizin yapısına bakın).
Ekspres uygulamamız için keycloak kodunu tanıtmaya geçmeden önce, size kısaca Keycloak'ın bir kullanıcı oturum açarken döndürdüğü belirteçlerden bahsetmek istiyorum -
Bu dosyanın üzerinden geçelim, öncelikle keycloak istemci adaptörümüz olan keycloak-connect'i içe aktarıyoruz. Daha sonra keycloak-connect tarafından dahili token önbelleğe alma için kullanılan bir bellek deposunu (memoryStore) başlatıyoruz. Son olarak, ilgilendiğimiz şey "/ home" ve "/ login" rotalarında sunulan ara yazılımlar. Bu rota içten Keycloak kullanıcı var yönlendirir my-ürün , bu durumda “http://127.0.0.1:3000/login” veya “http (biz talep ettiği gerçek url yönlendirme içeren, erişim alanının login sayfası: //127.0 .0.1: 3000 / home "hangisini önce çağırırsak. Keycloak.protect () işlevi, bu rotayı destekleyen asıl işleve erişmeden önce Keycloak'tan geçerli bir token elde etmemizi sağlar. Burada" / login "yalnızca keycloak.protect (), kimliği doğrulanmamış istekleri "/ login" veya "/ home" dan " my-product " giriş sayfasına yönlendireceğinden, ön uç rahatlığı . Devam etmeden ve home.ejs şablonumuzu değiştirmeden önce, bunu yeni deneyelim kod parçası bitti. Sunucuyu ctrl + c ile yeniden başlatın ve tekrar ($ node index.js) çalıştırın (sunucuları otomatik olarak yeniden başlatmak için nodemon veya iplik araçlarını keşfedin).http://127.0.0.1:3000/login, hemen Keycloak'ın "ürünüm" alanına yönlendiriliyoruz, kimlik bilgilerini giriyoruz ve çıktıların eşleşip eşleşmediğini görüyoruz -
NOT: Keycloak'ım ağımdaki farklı bir sunucuda barındırılıyor, yerel ana bilgisayarım değil, dolayısıyla URL yukarıda gördüğünüz gibi, aynı makineye yüklediyseniz sizin için 127.0.0.1/localhost gelmelidir.
Şimdi, bundan sonra ideal olarak oturum açmayı ve daha önce home.ejs sayfasını görmeyi beklersiniz (çünkü index.js oturum açma yolu işlevini görürseniz, başarılı oturum açıldığında ana sayfaya yönlendirmeyi görürüz). Bakalım ne alacağız -
Keycloak'ta oldukça yeniyseniz, bu zamana kadar kafanız karışacak. Merak etmeyin bu bekleniyor. Nerede yanlış yaptığımızı merak ediyor musun? Belki nodejs kodu? Veya bazı Keycloak yapılandırması? Sonuçta bir çok kurulumdan geçtik, bir şeyler ters gitmiş olabilir. Ancak gerçek neden, Keycloak'ın uyguladığı, izleyici denetimi adı verilen çok kullanışlı bir güvenlik konseptidir. Derinlemesine netlik için aşağıdaki makaleye bakın -
Genel fikir, istemcilerin belirteçleri doğrulama şeklinin kitle doğrulamasını içerecek şekilde yapılandırılabilir olmasıdır. Bu, doğru rollerle bile uygulamalara istenmeyen erişim olasılığını azaltır (örneğin, sunucudan sunucuya istenmeyen iletişim gibi). Hedef kitle olarak belirli bir müşteriye sahip değilse, belirteçler reddedilecek. Bizim durumumuzda, "benim-uygulamam" istemcimize, bir oturum açma sürecinden geçerken kendisini hedef kitle olarak ekleyen bir kapsam eklemeliyiz. Bu çok önemli kavramları derinlemesine anlamak için resmi Keycloak web sitesinde protokol eşleyicileri , kapsamları ve iddiaları hakkında daha fazla bilgi edinin .
Keycloak'ta İstemci Kapsamları sayfasına gidin, Oluştur düğmesine tıklayın ve yeni bir istemci kapsamı "uygulama kapsamım" ekleyin -
Ardından sekme çubuğundan Eşleştiriciler'i seçin, Oluştur düğmesini tıklayın ve "uygulamam-kitle-protokolü-eşleştiricisi" adıyla bir eşleyici oluşturun -
Yukarıda, Eşleyici Türü Hedef Kitlesi'ni seçin, böylece Keycloak, kodlanmış simgelerin hangi alanında hedef kitle değerlerini ekleyeceğini bilir. İsterseniz kimlik belirtme anahtarına ekleme özelliğini devre dışı bırakabilirsiniz, sadece olduğu gibi bırakacağım. Son olarak, Müşteriler sayfasına gidin, "uygulamam" ı seçin, İstemci Kapsamlarına tıklayın ve bu yeni eklenen istemci kapsamını buna ekleyin -
Şimdi nodejs kodumuzu tekrar test etmeye hazırız. Hedef kitle parametresi olmadan mevcut oturum jetonunu temizlemek için önce "http://127.0.0.1:3000/logout" düğmesini tıklayın. Sonra tekrar “http://127.0.0.1:3000/login” e gidin ve Keycloak'ın oturum açma sayfasına giriş yapın. Şimdi başarılı bir giriş yaptıktan sonra aşağıdaki sayfayı görmelisiniz -
Keycloak ve nodejs ile büyük bir başarı elde ettik. Ancak yine de test etmemiz gereken birkaç özelliğimiz var. Evet, giriş yaptık ve rotalarımız kimlik doğrulama ile korunuyor, peki ya yetkilendirme? Keycloak'ımızda zaten bir yetkilendirme çerçevemiz olduğunu unutmayın (ve bunu Müşteri altındaki Yetkilendirmede Değerlendir sekmesi ile zaten test ettik). Özel olarak izin talep etmek için bazı yolları nasıl koruyabileceğimize bakmak için kodumuzu düzenleyelim. İşte son index.js'miz -
Keycloak'ın yetkilendirme kontrolü özelliğini sergilemek için 2 ek yol (GET “/ asset01”, GET “/ asset01 / update”) ekledik. İdeal olarak ikinci yol, yani "varlık01 / güncelleme" bir POST isteği olmalıydı, ancak burada GET yolunu kullanıyoruz çünkü kullanıcı arayüzünden ön uç isteğimizi basitleştiriyor. Sen görebileceğiniz keycloak.enforcer “:” kaynak ve kapsamı bir şekilde yansıtılması anlamına katman funtion birleştirilmiş dize (kitaplığın bir talebe, kendisini keycloak değil). Bu, yol yolunun sonunda bulunan işleve yalnızca kaynak üzerinde gerekli kapsam erişimine sahip kullanıcılar tarafından erişilmesini sağlar. Bizim durumumuzda, "/ asset01" uç noktamız , asset-01 kaynağında bir okuma kapsamı izni gerektirir ve "/ asset01 / update" uç noktası , varlık-01 kaynağında bir kapsam yazma izni gerektirir . Hatırlarsan, bizim kullanıcı John Halpert erişimi sadece izin verilen bizim izinler sekmesinde gördüğümüz bir kullanıcı rolü, kuruluşunda verdiği okuma varlık-01 kaynak kapsamı, değil yazmak . Ayrıca, base64 kodlu jwt'nin yükünü bir JSON ayrıştırılmış nesneye ( token içeriğini incelemek için yükü console.log yapabilirsiniz). Gönderdiğimiz yeni bilgileri yakalamak için home.ejs'i biraz değiştirelim -
Uygulamada görelim, önce oturumu kapatın ("http://127.0.0.1:3000/logout"), ardından Keycloak'ın oturum açmanız gereken oturum açma sayfasına otomatik bir yönlendirme. "/ Home" a yönlendirilmelisiniz. başarılı giriş, görebileceğiniz -
Sonra "http://127.0.0.1:3000/asset01" url'sine gidebiliriz ve başarılı bir yanıt bulmalıyız -
Ve "http://127.0.0.1:3000/asset01/update" yolu reddedilen bir erişim vermelidir -
İşte başlıyoruz, her şey tamam. Uygulamamıza tam teşekküllü bir IAM yazılımını başarıyla entegre ettik. Keycloak'ın yapabileceği daha pek çok şey var, bu yüzden uygulamanızı mümkün olan en iyi şekilde güvence altına almak için ince ayar yapın, inceleyin, derinlemesine keşfedin.
Bu kadar uzun süre kaldığınız için teşekkür ederiz, umarım bu dizi size yardımcı olmuştur.
Bu serinin 1. Bölümünü okuyun -Keycloak nedir? Nasıl kullanılır - nodejs ile bir örnek? (Bölüm 1)
Keycloak'ın bir üretim ortamında birden fazla mikro hizmetle nasıl kullanılacağı hakkında daha fazla bilgiyi buradan okuyun -Birden çok mikro hizmetle üretim sistemlerini güvence altına almak için Keycloak
Öğreticinin Tam Kodu -
Giriş Günümüzün dijital dünyasında, çevrimiçi dolandırıcılık giderek yaygınlaşıyor. Kimlik avı girişimlerinden sahte kripto para borsalarına kadar, kime güveneceğinizi bilmek zor olabilir.
(Bu mikro blog ilk olarak twitter'da yayınlanmıştır. Orijinal ileti dizisini görmek için burayı tıklayın) Kuzey Kutbu'nda "Daha iyi gizlilik basit adımlarla başlar" diye bir sözümüz vardır.
Kasım 2020'nin başlarında SalesForce, açıklanamayacak şekilde JARM adlı yeni bir aktif TLS parmak izi alma aracını duyurdu. JARM'ın temeli, bir hedef sunucu özel olarak hazırlanmış çeşitli farklı TCP "İstemci merhaba" paketleri kullanılarak tarandığında, elde edilen yanıtların birleştirilip, paylaşılan veya benzer bir uygulama veya sunucunun göstergesi olan bir parmak izi sağlamak için karma hale getirilebilmesidir. yığını.
Harika geliştiriciler yapan teknik olmayan şeyler Bir süredir bu makaleyi yazmayı erteliyorum - yazmak için hiç nitelikli hissetmedim. Bugün onu yazma zamanının geldiğini düşündüm.
Teknoloji endüstrisindeki bir pozisyon için mülakat yaparken, herhangi bir teklif değerlendirilmeden önce genellikle en az üç tur mülakattan geçeceksiniz. Mermiler genellikle şuna benzer: Eğer öyle düşünüyorsan, yanılıyorsun.
Pragmatik Programcı ilk olarak 1999'da yayınlandı ve o zamandan beri tüm zamanların en iyi programlama kitabı seçildi. Yazarlar Andy Hunt ve David Thomas, Agile Manifesto'nun orijinal yazarları arasındaydı ve bazı ciddi referanslara sahipler.