Günümüzde şirketlerin büyük bir kısmı, uygulamalarına erişim sağlayan kullanıcıların kimliğini doğrulamak ve yetkilendirmek için modern kimlik yönetim sistemlerine ihtiyaç duymaktadır. Ones Technology, biyometrik tabanlı geçiş kontrolü ve güvenlik çözümleri üreticisi olmasının yanı sıra, ürün bilgileri ve kullanım kılavuzları, teknik dokümanlar, müşteri ve entegratör dokümantasyonları ile geliştiricilere yönelik içeriklere erişimde kimlik doğrulama ve yetkilendirme süreçlerinde Keycloak’ı kullanmaktadır. Bu sayede, farklı teknolojileri entegre ederek müşteri ihtiyaçlarına daha esnek ve güvenli çözümler sunmayı, aynı zamanda sürekli olarak iyileşme ve gelişme hedefinde ilerlemeyi sürdürmektedir.

SSO kullanımı, kullanıcıların kimlik bilgilerini merkezi ve güvenli bir noktada tutarak, tüm sistemlerde veri paylaşımını sınırlayarak, siber saldırılara karşı daha dayanıklı bir yapı oluşturur. Bu yaklaşım, özellikle çok sayıda kullanıcı ve sisteme sahip organizasyonlar için kritik bir güvenlik önlemidir.

Bu makalede, Keycloak’ın Ones Technology’deki kullanımı, SAML entegrasyonu, Jira tabanlı kullanıcı senkronizasyonu ve Confluence Scroll Viewport ile erişim yönetimi detaylı şekilde incelenmektedir. Kurumsal kimlik doğrulama ve yetkilendirme süreçlerine dair kapsamlı bilgiler sunulmaktadır.

Keycloak Nedir?

Keycloak, Red Hat tarafından geliştirilen, Java tabanlı ve açık kaynak kodlu kimlik ve erişim yönetimi sunan bir platformdur. Keycloak, kullanıcıların merkezi bir sistem üzerinden kimlik doğrulaması ve yetkilendirme yapmasına ve farklı uygulamalara Single Sign-On (SSO) mekanizmasıyla erişim sağlamasına olanak tanır. Günümüzde internet erişiminin yaygınlaşması ve kullanılan uygulama sayısının artmasıyla, her hizmet için ayrı hesap oluşturmak zorunluluğu doğmaktadır. Zamanla bu hesapların yönetimi karmaşık hale gelebiliyor. İşte bu noktada devreye giren Single Sign-On (Tek Oturum Açma), tek bir kimlik bilgisiyle birden fazla hizmete erişim sağlayarak kullanıcı deneyimini kolaylaştırıyor ve güvenliği artırıyor.

Keycloak’ın Temel Bileşenleri

Realm (Yetki Alanı)

Keycloak içinde birbirinden bağımsız kullanıcı, rol ve istemcileri yöneten izole alanlardır. Her realm, kendi kimlik doğrulama ve yetkilendirme kurallarına sahiptir. Böylece farklı kullanıcı grupları ve uygulamalar için ayrı güvenlik politikaları uygulanabilir.

Örnek

developer → Şirket yazılımcılarının giriş yaptığı yetki alanı

customer → Müşterilerin erişim sağladığı alan

entegrator → Entegratörlerin sisteme giriş yaptığı alan

Her biri bağımsız yönetilir ve ayrı kullanıcı veritabanlarına sahip olabilir.

Clients (İstemciler)

Keycloak üzerinden kimlik doğrulama yapan uygulama ve servislerdir.
Web uygulamaları, mobil uygulamalar veya API servisleri istemci (client) olarak tanımlanır.
Her istemci, belirli kimlik doğrulama ve yetkilendirme yapılandırmalarına sahiptir.

Users (Kullanıcılar)

Sistemde kayıtlı, kimlik doğrulaması yapılan gerçek kişilerdir.
Kullanıcı bilgileri, Keycloak’ın dahili veritabanında tutulabileceği gibi LDAP, Active Directory gibi harici dizin servislerinden de alınabilir.
Ayrıca, Ones Technology olarak geliştirdiğimiz çözümde olduğu gibi, Jira sisteminden Keycloak’a tek yönlü kullanıcı senkronizasyonu sağlanabilir.

Roles (Roller)

Kullanıcılara verilen erişim yetkilerini tanımlar. Roller sayesinde, her kullanıcının sistemde hangi işlemleri yapabileceği belirlenir.

Örnek Roller
  • Admin → Tüm yetkilere sahip kullanıcı
  • Editor → İçerik oluşturma ve düzenleme yetkisi olan kullanıcı
  • User → Sadece içerikleri görüntüleyebilen kullanıcı

Identity Providers (Kimlik Sağlayıcıları)

Dış sistemlerden kullanıcı doğrulaması yapılmasını sağlayan bileşendir.
LDAP, Active Directory gibi kurumsal dizinlerle; Google, Facebook gibi sosyal kimlik sağlayıcılarla entegre çalışabilir.
Bu yapı sayesinde, mevcut kullanıcı sistemleriyle uyumlu kimlik doğrulama süreçleri kolayca uygulanabilir.

SAML (Security Assertion Markup Language) Nedir?

SAML (Security Assertion Markup Language), federatif kimlik doğrulama protokolüdür ve genellikle kullanıcıların birden fazla uygulama veya hizmete güvenli bir şekilde erişmesini sağlamak için kullanılır. XML tabanlı bir formatla çalışan SAML, kimlik doğrulama ve yetkilendirme bilgilerini taşır. Bu protokol, bir Kimlik Sağlayıcı (Identity Provider – IdP) ile bir Servis Sağlayıcı (Service Provider – SP) arasında veri iletimi yaparak kullanıcıların kimlik bilgilerini doğrulamak ve yetkilendirme sağlamak için kullanılır. SAML, özellikle kurumsal ortamlarda ve bulut tabanlı hizmetlerde tek oturum açma (SSO) deneyimi sunmak için yaygın olarak tercih edilir.

Bir kullanıcı, bir Servis Sağlayıcı (SP) platformuna erişmeye çalıştığında, sistem önce Kimlik Sağlayıcı (IdP) ile iletişim kurarak kullanıcının kimliğini doğrular. Kimlik sağlayıcı, doğrulama işlemi başarılı olduğunda bir SAML Yanıtı gönderir. Bu yanıt, kullanıcının kimliğine dair bilgileri (örneğin, kullanıcı adı, e-posta adresi, yetkiler gibi) içerir ve bu bilgiler Servis Sağlayıcı (SP) tarafından alınarak kullanıcıya uygun erişim izinleri verilir. Böylece kullanıcı, her bir hizmete ayrı ayrı giriş yapmak zorunda kalmadan, tüm entegre platformlara güvenli bir şekilde tek bir oturum açarak erişebilir.

Örnek bir SAML Response aşağıdaki şekildedir:

<?xml version="1.0" encoding="UTF-8"?>
<samlp:Response
    xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol"
    xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion"
    ID="response-12345"
    Version="2.0"
    IssueInstant="2025-03-16T12:34:56Z"
    Destination="https://customer-help.bioaffix.com/saml/acs"
    InResponseTo="request-12345">

    <saml:Issuer>https://sso.bioaffix.com/realms/BioAffix</saml:Issuer>

    <saml:Assertion ID="assertion-67890" IssueInstant="2025-03-16T12:34:56Z">
        
        <saml:Issuer>https://sso.bioaffix.com/realms/BioAffix</saml:Issuer>
        
        <saml:Subject>
            <saml:NameID Format="urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified">[email protected]</saml:NameID>
            <saml:SubjectConfirmation Method="urn:oasis:names:tc:SAML:2.0:cm:bearer">
                <saml:SubjectConfirmationData 
                    NotOnOrAfter="2025-03-16T12:44:56Z" 
                    Recipient="https://customer-help.bioaffix.com/saml/acs"/>
            </saml:SubjectConfirmation>
        </saml:Subject>

        <saml:Conditions NotBefore="2025-03-16T12:34:56Z" NotOnOrAfter="2025-03-16T12:44:56Z">
            <saml:AudienceRestriction>
                <saml:Audience>https://customer-help.bioaffix.com</saml:Audience>
            </saml:AudienceRestriction>
        </saml:Conditions>

        <saml:AuthnStatement AuthnInstant="2025-03-16T12:34:56Z" SessionIndex="session-12345">
            <saml:AuthnContext>
                <saml:AuthnContextClassRef>urn:oasis:names:tc:SAML:2.0:ac:classes:PasswordProtectedTransport</saml:AuthnContextClassRef>
            </saml:AuthnContext>
        </saml:AuthnStatement>
        
        <saml:AttributeStatement>
            <saml:Attribute Name="email">
                <saml:AttributeValue>[email protected]</saml:AttributeValue>
            </saml:Attribute>
            <saml:Attribute Name="role">
                <saml:AttributeValue>user</saml:AttributeValue>
            </saml:Attribute>
        </saml:AttributeStatement>

    </saml:Assertion>
</samlp:Response>

Confluence Scroll Viewport, Confluence içeriğini web sitesi formatında yayınlamak için kullanılan bir aracıdır. Help portalına erişim sağlamak isteyen kullanıcılar(customer, developer, entegretor dokümantasyonları için), Keycloak ile kimlik doğrulaması yaparak farklı olarak yetkilendirilmiş gruplarla giriş yapmaktadır.

Keycloak’ta Rol ve Yetkilendirme Ayrımı

Keycloak, rol yönetimi ve yetkilendirme süreçlerini birbirinden ayırarak esnek ve güvenli bir erişim kontrolü sağlar. Bu iki kavram arasındaki farkı anlamak, doğru yapılandırmalar yapmanıza yardımcı olacaktır.

Rol Yönetimi

Rol (Role), kullanıcılara belirli yetkiler atamak için kullanılan bir yapıdır. Keycloak’ta roller, genellikle kullanıcıların erişim seviyelerini belirlemek için kullanılır. Örneğin:

  • customer rolü, sadece müşteri verilerine erişime sahip olabilir.
  • developer rolü, daha fazla teknik kaynağa ve sistem üzerinde yönetimsel izinlere sahip olabilir.
  • integrator rolü, üçüncü parti sistemlerle entegrasyon yapabilme yetkisini taşıyabilir.

Bir kullanıcının birden fazla rolü olabilir, örneğin, Bir geliştirici aynı zamanda müşteri rolüne de sahip olabilir. Bu sayede, kullanıcının farklı sistem bölümlerine erişimi yetkilendirilebilir. Keycloak, rollerin hiyerarşik bir yapıda oluşturulmasına izin verir, yani bir üst rol, alt rollerin izinlerini devralabilir.

Yetkilendirme

Yetkilendirme (Authorization), bir kullanıcının hangi kaynaklara, servislere veya verilere erişebileceğini belirler. Yetkilendirme, rollerin daha da özelleştirilmesi ve kullanıcıların doğru kaynağa erişmesini sağlamak için kullanılır. Keycloak’ta, bir kullanıcı rol ile yetkilendirilir, ancak yetkilendirme süreci sadece rol bazında değil, aynı zamanda grup ve izinler düzeyinde de kontrol edilir.

Örneğin, farklı gruplar kullanıyorsanız, her grup farklı kaynaklara erişim sağlayabilir:

  • Customer grubu: Bu gruptaki bir kullanıcı, sadece müşteri bilgilerine ve raporlarına erişebilir.
  • Developer grubu: Bu gruptaki bir kullanıcı, sistemin teknik altyapısına erişim sağlayabilir.
  • Entegrator grubu: Bu gruptaki bir kullanıcı, API’lere ve dış sistemlerle entegrasyon yapacak verilere erişebilir.

Keycloak, realm ve grup bazında yetkilendirmeyi yöneterek, her realm ve grup için özel roller ve erişim seviyeleri oluşturmanıza olanak tanır. Bu sayede, farklı projelere yönelik farklı kullanıcı türleri oluşturabilir ve her proje için ayrı yetkilendirme politikaları uygulayabilirsiniz.

Örnek Senaryo

Diyelim ki üç grubumuz var: customer, developer ve integrator. Bu gruplar için roller ve yetkilendirme aşağıdaki gibi olabilir:

Customer

  • customer_role: Müşterilere ait verilere (Bioaffix Kullanım ve Kurulum Klavuzu) erişim.
  • customer_admin_role: Müşterilere ait verileri yönetme, düzenleme yetkisi.

Developer

  • developer_role: Uygulama ve yazılım altyapısına erişim, hata raporlama yetkisi.
  • developer_admin_role: Yazılım güncellemeleri yapma, sistem üzerinde yönetimsel işlemler.

Integrator

  • integrator_role: Üçüncü parti sistemlerle bağlantı kurma, API’lere erişim.
  • integrator_admin_role: Dış sistem entegrasyonlarını yönetme ve yapılandırma.

Her bir realm için roller ve bu rollere atanan kullanıcılar farklı yetkilendirme seviyeleriyle yapılandırılabilir. Örneğin, bir developer kullanıcısı, developer grubuyla ilişkilendirilmiş teknik verilere erişirken, customer grubu yalnızca müşteri verilerine erişebilir, ancak integrator grubundaki API’leri kullanma iznine sahip olmayabilir. Bu şekilde, her grup için özel roller ve yetkilendirme süreçleri tasarlanabilir.

Keycloak REST API Kullanımı

Keycloak’ta REST API kullanarak kullanıcı oluşturmanın yanı sıra, yönetim arayüzünde gerçekleştirebildiğiniz tüm işlemleri de API aracılığıyla programatik olarak yapabilirsiniz.

Aşağıda, token almak ve bir kullanıcı oluşturmak için temel adımları bulabilirsiniz.

Token almak için önce Keycloak’ın token endpoint’ine bir istek göndermeniz gerekir. Bu, genellikle /protocol/openid-connect/token endpoint’inde bulunur.

Bu yanıtla birlikte access_token’ı alarak, diğer API isteklerinde kullanabilirsiniz. Verdiği access tokeni incelemek istediğimizde;

http://jwt.io sitesinden Keycloak’ın verdiği token’ı çözümleyince JWT Token Açıklaması şu şekildedir:

  1. Header(Başlık): JWT’nin nasıl imzalandığını ve hangi algoritmanın kullanıldığını belirtir.
  2. Payload(Yük): Kullanıcının kimliği, yetkileri ve diğer metada bilgilerinii içerir. Örneğin exp(expiration) ve iat(issued at) tokenın geçerlilik süresini unix timestamp cinsinden değerini verirken, sid(session id) oturum için atanmış benzersiz kimlik, scope ise tokenın hangi yetkileri içerdiğini belirtir.
  3. Signature(İmza): JWT’nin güvenilir olup olmadığını anlamak için oluşturulan formül. RSASHA256(
    base64UrlEncode(header) + “.” + base64UrlEncode(payload),
    Private Key
    )
  4. 🔹 Public Key (Genel Anahtar) → JWT’yi doğrulamak için kullanılır ve Keycloak’ın openid-configuration adresinden alınabilir.🔹 Private Key (Özel Anahtar) → JWT’yi imzalamak için kullanılır ve Keycloak sunucusunda saklanır.

Kullanıcı Oluşturma Örneği

Önceki adımda aldığınız Access Token’ı kullanarak yetkilendirme işlemini gerçekleştirin. Authorization başlığında bu token’ı belirtin ve Body kısmına, yeni kullanıcıya ait bilgileri JSON formatında ekleyin.

Daha sonra, POST isteği göndererek yeni bir kullanıcı oluşturabilirsiniz.

İşte bu kadar! Tokenımızı alarak hızlı bir şekilde kullanıcı oluşturmayı başardık. Ones Technology olarak, Jira sisteminden kullanıcıları alıp Keycloak sunucusuna API aracılığıyla senkronize eden bir yapı geliştirdik. Kullanıcı senkronizasyonu tamamlandığında, erişebileceği portalların bilgileri, rastgele oluşturulan şifresi ve e-posta adresiyle birlikte kendisine bilgilendirme e-postası gönderiyoruz. Kullanıcı, bu bilgilerle portala giriş yaptıktan sonra şifresini zorunlu olarak değiştirmesi isteniyor. Bu yaklaşım sayesinde, kullanıcı verilerini kendi sistemimizde saklamıyor; süreci güvenli ve kontrollü bir şekilde yönetiyoruz.

Örnek Jira kullanıcısı ve gönderilen e-posta içeriği aşağıda yer almaktadır:

Kolay Kurulum ve Entegrasyon

Keycloak, kimlik doğrulama ve yetkilendirme süreçlerini yönetmeyi kolaylaştıran güçlü bir çözüm sunar. Kurulumu son derece basittir ve genellikle birkaç komutla çalıştırılabilir. İster setup (exe) (biz bunu kullanıyoruz) ister Docker kullanarak tek bir komutla bir Keycloak sunucusunu ayağa kaldırabilirsiniz:

Bu sayede dakikalar içinde çalışır hale gelir ve herhangi bir ek yapılandırma olmadan bir kimlik sağlayıcı (IdP) olarak kullanabilirsiniz. Kurulumu tamamladıktan sonra, ister kendi sunucularınıza (on-premise) kurabilir, ister Azure Kubernetes, AWS ECS veya Google Cloud Run gibi bulut hizmetlerinde barındırabilirsiniz.

Kullanıcı Dostu Kimlik Doğrulama Sayfaları

Ön yüz tarafında, Keycloak ile gelen hazır kimlik doğrulama sayfaları sayesinde sıfırdan bir giriş ekranı tasarlamak zorunda kalmazsınız. Örneğin, kullanıcılarınız için özelleştirilebilir giriş sayfaları, parola sıfırlama formları ve oturum yönetim panelleri sağlar. Ones Technology gibi büyük teknoloji firmaları, çalışanları ve kullanıcıları için özelleştirilmiş giriş sayfaları sunarak, giriş sürecini daha kullanıcı dostu ve hızlı hale getirebilir. Bununla birlikte, kullanıcılarınızın Facebook veya Google hesaplarıyla giriş yapabilmesi de sağlanabilir, bu sayede özellikle dış kullanıcılar için kayıt süreci hızlanabilir ve kullanıcı deneyimi iyileştirilebilir.

Arka Uç Entegrasyonu

Arka uç tarafında, Keycloak’ın REST API ve OpenID Connect desteği sayesinde, herhangi bir backend servisi ile kolayca entegre edebilirsiniz. Örneğin, bir .NET Core API uygulaması, kullanıcı kimlik doğrulamasını Keycloak ile yaparak JWT token doğrulaması gerçekleştirebilir. Bir mobil uygulama (Android / iOS) ise, Keycloak’ın OAuth 2.0 akışlarını kullanarak güvenli bir şekilde oturum açabilir.

Çeşitli Kimlik Sağlayıcıları ile Entegrasyon

Keycloak farklı kimlik sağlayıcılarını destekler. Örneğin, LDAP veya Active Directory ile entegre edilerek büyük kurumsal şirketlerde çalışanların şirket e-posta ve şifreleriyle giriş yapmasına olanak tanır.

Esneklik ve Ölçeklenebilirlik

Keycloak, esnek, güçlü ve ölçeklenebilir bir kimlik yönetimi çözümü sunarak hem küçük çaplı projeler hem de büyük kurumsal sistemler için ideal bir altyapı sağlar.

Sonuç

Bugünün dijital dünyasında, kurumlar çeşitli uygulama ve sistemlere bağlandıkça, kullanıcı bilgilerini her bir sisteme ayrı ayrı girip sürekli olarak güncellemek, hem zaman kaybına yol açar hem de güvenlik risklerini artırır. Kullanıcıların hassas bilgilerini farklı sistemlerle paylaşmak, bu bilgilerin çeşitli noktalarda saklanmasına neden olur ve her bir nokta potansiyel bir saldırı hedefi haline gelir. Ancak, Single Sign-On (SSO) kullanarak, kullanıcı bilgileri tek bir güvenli platformda saklanabilir ve her uygulama yalnızca gerekli doğrulama bilgilerini bu merkezi platformdan alır. Böylece, bilgilerin her bir sistemde saklanması yerine yalnızca tek bir güvenli noktada korunması sağlanır, bu da siber saldırılara karşı daha güçlü bir savunma hattı oluşturur.

Örneğin, geçtiğimiz dönemde yaşanan TurkNet siber saldırısında olduğu gibi, merkezi bir kimlik sağlayıcısı kullanılsaydı, saldırganlar yalnızca bu merkezi servise saldırarak sınırlı bir erişim elde edebilirdi. Böylece, her bir sistemdeki kullanıcı verisi ele geçirilmek yerine, daha izole ve güvenli bir yapı sağlanmış olurdu. Ayrıca, tüm sistemleri ayrı ayrı savunmak yerine, tek bir noktayı savunarak potansiyel tehditleri en aza indirebilirdik.

Sonuç olarak, SSO kullanımı, kullanıcıların kimlik bilgilerini merkezi ve güvenli bir noktada tutarak, tüm sistemlerde veri paylaşımını sınırlayarak, siber saldırılara karşı daha dayanıklı bir yapı oluşturur. Bu yaklaşım, özellikle çok sayıda kullanıcı ve sisteme sahip organizasyonlar için kritik bir güvenlik önlemidir.

Dört ayda bir yayınlanan BioAffix elektronik posta bültenine abone olarak yeni gelişmeler hakkında bilgi sahibi olabilirsiniz.