Ana içeriğe geç

1.2.1. Başlarken#

Veri Depolama(Data Storage)#

Authorization uygulamasının çalıştırılması için :

  • Veri kaynağı olarak PostgreSQL ve/veya ldap olarak ayarlanması
  • Sistem ve kullanıcı ayar yönetimi için system setting uygulaması çalıştırması
  • Tercihe bağlı önbellek(cache) yönetimi için redis seçildi ise redis uygulamasının çalıştırılması

gerekmektedir.

PostgreSQL docker bilgisine buradan ulaşabilirsiniz.

Uygulama Paketi (Instances)#

Authorization docker instance'ına buradan ulaşabilirsiniz.

Varsayılan Uygulama Parametreleri (Default Environment Variables)#

Değişken Adı Değeri Açıklama
SERVER_APP_NAME authz-server Uygulama isim bilgisidir.
SERVER_DESCRIPTION Hvl Authorization Server Uygulama açıklama bilgisidir.
SWAGGER_DESCRIPTION Havelsan authorization services info Uygulamanın swagger döküman açıklamasıdır.
DB_SCHEMA_CREATE_ENABLED true Uygulama çalıştırılma aşamasında şema oluşturulmasını aktif eder.
DB_SCHEMA oauth Uygulama verilerinin işlendiği RDMS schema bilgisidir.
DDL_AUTO_TYPE create Veri ilklendirme strateji bilgisidir.
SPRING_JPA_SHOW_SQL false Spring'in veritabanı operasyonlarına ilişkin çalıştırılan sql loglarının aktif edilmesini sağlar.
AUTHZ_EVENT_ENABLED false Uygulamadan event fırlatılıp fırlatılmayacağını (fire) belirleyen değerdir.
REDIS_CM_CACHE_PREFIX HVL::OAUTH::AUTHZ:: Redis üzerinde tutulan cache prefix değeridir.
REDIS_CM_VALUE_SERIALIZER java Cachelenecek verinin serialize edilme yöntemini belirleyen değerdir.
KAFKA_SUPPORT_ENABLED false Eventlerin saklanacak ve işlenecek veri kaynağı olarak kafka olup olmamasını belirleyen değerdir
LOGGING_CONFIG \({spring.cloud.config.uri}/\)/default/framework()log4j2()instance()oauth()auth/log4j2.yml Log4j konfigürasyon dosyasını alacağı konum bilgisidir.
EVENT_LOG_SEARCH_INDICES_NAME hvl-* Olay kaydı sorgulama ekranı için sorgulanacak index prefix bilgisidir.
SECURITY_ENABLED true Güvenlik akışını aktif eder. Token validasyonu yapar.
SERVER_PORT 7081 Uygulamanın sunulduğu port bilgisidir.
SPRING_PROFILES_ACTIVE authorization,jwt,redis Uygulamanın çalıştığı aktif profile bilgileridir.
CACHE_TYPE redis 'simple' seçeneği ile inmemory cache kullanımı sağlanır.
'redis' seçeneği ile redis cache desteği sağlanır.
LIQUIBASE_ENABLED 'true' Liquibase eklentisini aktif hale getirmek için gereken parametredir.
LIQUIBASE_DROP_FIRST 'true' Bu değer true iken Liquibase çalışmadan önce üzerinde çalıştığı modülün ilgili şemasını düşürüp kendi oluşturur.
LIQUIBASE_CONTEXTS dev Liquibase'deki changesetlerin hangi contextte çalıştığını gösteren parametredir.

Veri ilklendirme (Data Initializer)#

Geliştirme ortamında docker ile hvl-oauth-authz-server servisi çalıştırıldığı zaman 5 adet kullanıcı, rolleri ile birlikte sisteme otomatik olarak ilklendirilecektir.

Kendi modülünüze veya testlerinize uygun yetkilendirme eklemek için örnek senaryolar aşağıdaki gibidir. Bu senaryolarda kullanılacak SQL'ler sayfanın daha aşağısında başlıklar halinde bulunmaktadır.

  • Yeni Kullanıcı Ekleme Sırasıyla;

    1. Kullanıcı Detay Tipi Ekleme
    2. Kullanıcı Detay Ekleme
    3. Kullanıcı Ekleme
    4. Profil Detay Tipi Ekleme
    5. Profil Detay Ekleme
    6. Profil Ekleme
    7. Profil-Profil Detay (ilişkilendirme) Ekleme
    8. Yetki Ekleme
    9. Etiket Ekleme (Zorunlu Değil)
    10. Etiket-Yetki (ilişkilendirme) Ekleme (Zorunlu Değil)
    11. Rol Ekleme
    12. Rol-Yetki (ilişkilendirme) Ekleme
    13. Profil-Rol (ilişkilendirme) Ekleme
  • Varolan Kullanıcıya Yeni Profil Ekleme Sırasıyla;

    1. Profil Detay Tipi Ekleme
    2. Profil Detayı Ekleme
    3. Profil Ekleme
    4. Profil-Profil Detay (ilişkilendirme) Ekleme
    5. Yetki Ekleme
    6. Etiket Ekleme (Zorunlu Değil)
    7. Etiket-Yetki (ilişkilendirme) Ekleme (Zorunlu Değil)
    8. Rol Ekleme
    9. Rol-Yetki (ilişkilendirme) Ekleme
    10. Profil-Rol (ilişkilendirme) Ekleme
  • Varolan Profile Rol Ekleme Sırasıyla;

    1. Yetki Ekleme
    2. Etiket Ekleme (Zorunlu Değil)
    3. Etiket-Yetki (ilişkilendirme) Ekleme (Zorunlu Değil)
    4. Rol Ekleme
    5. Rol-Yetki (ilişkilendirme) Ekleme
    6. Profil-Rol (ilişkilendirme) Ekleme
  • Bütün ilkledirmelerin yapıldığı senaryoda Profile Rol Ekleme

  • Profil-Rol (ilişkilendirme) Ekleme

Bir kullanıcı yetki alma işlemini 4 farklı yolla almaktadır. 1. Profile direk rol atama 2. Profile rol grup atama 3. Profili bir profil grubuna ekleme 4. Kullanıcıya bir profilin vekalet verilmesi

Kullanıcı Ekleme#

Güvenlik açık olduğunda, sisteme sadece kayıtlı kullanıcılar ile giriş yapılabilmektedir. Veritabanına kullanıcı kayıt işlemi aşağıdaki örnekler kullanılarak yapılabilir.

Kullanıcı Detay Tİpi Ekleme SQL

Bu veri kurum ihtiyacı dahilinde kullanıcılar için hem bir filtre kabiliyeti hem de kullanıcı tipi bazında varsayılan rol atayabilme kabiliyeti için kullanılmaktadır.

INSERT INTO oauth.kys_parameter (parameter_type, id, created_by, created_at, updated_at, updated_by, uuid,
obj_version, deleted, deleted_at, code, description, integration_code, order_no,
short_description)
VALUES ('USER_TYPE', NEXTVAL('oauth.kys_parameter_seq'), 'unknown', CURRENT_DATE, CURRENT_DATE, 'unknown',
'USER_TYPE_UUID_000000000000000000001', 0, 0, NULL, 'hvl_user', 'HVL User', 0, 1, NULL);

Kullanıcı Detay Ekleme SQL

Bu veri kullanıcılara ait aktif oturum bilgileri üzerinde tutulmasını istediğimiz metadata bilgilerini tutar. Daha fazlası için asıl kaynaklara ulaşılmasını sağlayacak integration_code alanı bulundurur. Başlanğıçta veri migrasyonu ile taşınacak bu verinin ana kaynağından beslenmesi için ana kaynaktan veri alıp kimlik yönetimi uygulamasına veriyi yazacak bir adapter uygulaması geliştirilmelidir.

INSERT INTO oauth.kys_user_detail (id, created_by, created_at, updated_at, updated_by, uuid, obj_version, deleted,
                                   email,
                                   integration_code, mobile_number, name, surname, user_type_id)
VALUES (NEXTVAL('oauth.kys_user_detail_seq'), 'unknown', CURRENT_DATE, CURRENT_DATE, 'unknown',
        'USER_DETAIL_UUID_0000000000000000001', 0, 0, 'hvltest1@havelsan.com.tr', 'USER_INT_1', NULL,
        'Hvl', 'Test1', (SELECT p.id
                         FROM oauth.kys_parameter p
                         WHERE p.parameter_type = 'USER_TYPE'
                           AND p.code = 'hvl_user'));

Kullanıcı Ekleme SQL

Sisteme giriş bilgilerinin barındırıldığı kullanıcı tablosudur.

INSERT INTO oauth.kys_user (id, created_by, created_at, updated_at, updated_by, uuid, obj_version, deleted,
                            deleted_at, expiration_date, failed_login_count,
                            password,
                            password_must_change, system, user_detail_id, username, tenant)
VALUES (NEXTVAL('oauth.kys_user_seq'), 'unknown', CURRENT_DATE, CURRENT_DATE, 'unknown',
        'USER_UUID_00000000000000000000000001', 0, 0, NULL,
        NULL, 0,
        '$2a$11$KAUPb426RiAuDtuXe5Wdteb4cuEsYWicN8Lrp0oM9rqmc/DnAAzji',
        0, 1,
        (SELECT id FROM oauth.kys_user_detail WHERE integration_code = 'USER_INT_1'),
        'hvltest1', NULL);

Not: Tenant ile çalışıldığı durumlarda update scriptleri çalıştırılarak tenant ilklendirilmeli.

Profil Ekleme#

Profile Detay Tipi Ekleme SQL

Profil detay profillerin ve profil gruplarının filtrelenebilmesi veya aktif oturum üzerinden erişilebilecek detay bilgileri için kullanılan bir veridir. Profil detay verisini filtrelemek için ise profil detay tipi alanı kullanılmaktadır. Örneğin; profile detay tipi -> organizasyon birim, unvan, rütbe gibi değerler olabilir. Profile detay bilgileri de bu tiplere uygun hiyerarşik olarak tutulan detay bilgileri barındırır.

INSERT INTO oauth.kys_parameter (parameter_type, id, created_by, created_at, updated_at, updated_by, uuid,
                                 obj_version, deleted, deleted_at, code, description, integration_code, order_no,
                                 short_description)
VALUES ('PROFILE_DETAIL_TYPE', NEXTVAL('oauth.kys_parameter_seq'), 'unknown', CURRENT_DATE, CURRENT_DATE, 'unknown',
        'PROFILE_DETAIL_TYPE_UUID_00000000003', 0, 0, NULL, 'unvan', 'Ünvan', 0, 2, NULL);

Profile Detay Ekleme SQL

INSERT into oauth.kys_profile_dtl (id, created_by, created_at, updated_at, updated_by, uuid, obj_version, deleted,
                                   integration_code, name, detail_type_id)
VALUES (NEXTVAL('oauth.kys_profile_dtl_seq'), 'unknown', CURRENT_DATE, CURRENT_DATE, 'unknown',
        'PROFILE_DETAIL_UUID_0000000000000002', 0, 0, 'PROFILE_INT_2',
        'Daire Başkanı', (SELECT p.id
                          FROM oauth.kys_parameter p
                          WHERE p.parameter_type = 'PROFILE_DETAIL_TYPE'
                            AND p.code = 'unvan'));

Profile Ekleme SQL

Kullanıcıya ait birden fazla profil olabilir fakat bir profil yanlızca bir kullanıcıya ait olabilir. Profil kullanıcının uygulamalar içinde tanımlı yetkilerini tutan ara katmandır. Bir kadro koltuğu gibi ele alındığında bu yetkilere sahip koltuk bir kullanıcıdan bir kullanıcıya da verilebilir.

INSERT INTO oauth.kys_profile (id, created_by, created_at, updated_at, updated_by, uuid, obj_version, deleted,
                               deleted_at,
                               description, name, user_id, virtual, enabled)
VALUES (NEXTVAL('oauth.kys_profile_seq'), 'unknown', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, 'unknown', 'PROFILE_UUID_00000000000000000000001',
        0,
        0, NULL,
        'Init profile 1', 'Standart Profil',
        (SELECT id FROM oauth.kys_user k WHERE k.username = 'hvltest1'), 0, 1);

Profil-Profil Detay (ilişkilendirme) Ekleme

INSERT INTO oauth.kys_profile_profile_dtl_rel (id, created_by, created_at, updated_at, updated_by, uuid, obj_version, deleted,
                                        profile_id, profile_detail_id)
VALUES (NEXTVAL('oauth.kys_profile_profile_dtl_rel_seq'), 'unknown', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, 'unknown',
        'PROFILE_PRFL_DTL_UUID_00000000000001',
        0, 0,
        (SELECT p.id from oauth.kys_profile p where p.uuid = 'PROFILE_UUID_00000000000000000000001'),
        (SELECT pd.id from oauth.kys_profile_dtl pd WHERE pd.uuid = 'PROFILE_DETAIL_UUID_0000000000000004'));

Yetki Ekleme#

Yetki backend yazılım içinde servis metodlarının üzerine @PreAuthorize("yetki_code") ve ui yazılımında guard mekanizmanı için yazılmış HvlIfAllGrantedDirective, HvlIfAnyGrantedDirective, HvlIfNotGrantedDirective direktifleri ile kullanılır. Bunların dışında uygulama menüleri için veri ilklendirmesinde menü erişimine ait yetkiler ilklendirilir. Bu sebeplerle ilklendirilen veriler ile yazılım içinde kullanılanların birebir aynı olması gerekmektedir.

Yetkiler hiyerarşik olarak tanımlanabilmektedir. Bu hiyerarşik tanımlama ile aktif oturumlar için daha az yetki taşıması yeteneği sağlanmıştır.

Aşağıdaki örnekteki gibi yetki koduna sahip hiyerarşik yetki tanımı yapıldığında, kişinin sahip olduğu yetkiler yukarıdan aşağıya doğru kapsayıcılık sağlar. Örneğin: IK Admin rolü için tüm IK yetki kodlarına "hr" prefix verilirse IK Admin rolüne sadece "hr" yetki kodu olan yetkinin verilmesi yeterli olacaktır. IK Ozlük Admin gibi bir rol için sadece "hr:ozluk" verilmesi yeterli olacaktır. Özlük submenüsünün altındaki bütün yetki kodları için "hr:ozluk" prefix kullanıldığı takdirde.

hr
hr:ozluk
hr:ozluk:terfi
hr:ozluk:terfi:tanim
hr:bodro
hr:bodro:prim
hr:bodro:prim:tanim
ÖNEMLİ: Kapsayıcılık kontrolü için ayıraç iki nokta(:) kullanılmaktadır.

Yetki Ekleme SQL

INSERT INTO oauth.kys_authority (id, created_by, created_at, updated_at, updated_by, uuid, obj_version, deleted, code, label)
VALUES (NEXTVAL('oauth.kys_authority_seq'), 'unknown', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, 'unknown',
        'AUTHORITY_UUID_000000000000000000001', 0, 0, 'keysys', 'Kimlik Yönetimi Modülü Yetkisi');

INSERT INTO oauth.kys_authority (id, created_by, created_at, updated_at, updated_by, uuid, obj_version, deleted, code, label, parent_id)
VALUES (NEXTVAL('oauth.kys_authority_seq'), 'unknown', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, 'unknown',
        'AUTHORITY_UUID_000000000000000000003', 0, 0, 'keysys:role_assigner', 'Rol Verme Yetkisi',
        (select a.id from oauth.kys_authority a where a.uuid = 'AUTHORITY_UUID_000000000000000000001'));

Etiket Ekleme SQL (Zorunlu Değil)

Yetki, rol ve rol grup bilgilerinin yetkilere atanmış etiketler üzerinden filtrelenmesi için sağlanan bir özelliktir. Çok yetki barındıran sistemlerde modul veya alt modul isimleri ile etiketlendirmeler kullanılarak yeni rol oluşturma sırasında yetkilerin filtrelenmesi, profillere rol veya rol grubu atama sırasında rol ve rol grup bilgisinin filtrelenmesi için kullanılır.

INSERT INTO oauth.kys_tag (id, created_by, created_at, updated_at, updated_by, uuid, obj_version, deleted, name)
VALUES (NEXTVAL('oauth.kys_tag_seq'), 'unknown', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, 'unknown',
        'AUTHORITY_TAG_UUID_00000000000000001', 0, 0, 'ortak');

Yetki-Etiket (ilişkilendirme) Ekleme SQL (Zorunlu Değil)

INSERT INTO oauth.kys_authority_tag_rel
(id, created_by, created_at, updated_at, updated_by, uuid, obj_version, deleted, deleted_at, authority_id, tag_id)
VALUES(NEXTVAL('oauth.kys_authority_tag_rel_seq'), 'unknown', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, 'unknown', 'AUTHORITY_TAG_UUID_00000000000000001', 0, 0, NULL,
       (select a.id from oauth.kys_authority a where a.deleted = 0 and a.code = 'default_authority'),
       (select t.id from oauth.kys_tag t where t.deleted = 0 and t.name = 'ortak'));

Rol Ekleme#

Roller aşağıdaki örnek gibi eklenebilir.

Rol Ekleme SQL

INSERT INTO oauth.kys_role (id, created_by, created_at, updated_at, updated_by, uuid, obj_version, deleted, code, description, enabled, editable, proxyable, name)
VALUES (NEXTVAL('oauth.kys_role_seq'), 'unknown', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, 'unknown', 'ROLE_UUID_00000000000000000000000001', 0, 0,
        'temelRol', 'Temel rol açıklama', 1, 1, 1, 'Temel Rol');

Rol-Yetki (ilişkilendirme) Ekleme#

Rol ile yetkileri ilişkilendirmek için aşağıdaki örnek kullanılabilir.

Rol-Yetki (ilişkilendirme) Ekleme SQL

INSERT INTO oauth.kys_role_authority_rel (id, created_by, created_at, updated_at, updated_by, uuid, obj_version, deleted, authority_id, role_id)
VALUES (NEXTVAL('oauth.kys_role_authority_rel_seq'), 'unknown', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, 'unknown','ROLE_YP_UUID_00000000000000000000001', 0, 0,
        (SELECT y.id FROM oauth.kys_authority y WHERE y.code = 'default_authority'),
        (SELECT r.id FROM oauth.kys_role r WHERE r.code = 'temelRol'));

Profil Rol Ekleme#

Profil ile rolleri ilişkilendirmek için aşağıdaki örnek kullanılabilir.

Profil Rol Ekleme SQL

INSERT INTO oauth.kys_profile_role_rel (id, created_by, created_at, updated_at, updated_by, uuid, obj_version, deleted,
                                        profile_id, role_id)
VALUES (NEXTVAL('oauth.kys_profile_role_rel_seq'), 'unknown', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, 'unknown',
        'PROFILE_ROLE_UUID_000000000000000001',
        0, 0,
        (SELECT p.id from oauth.kys_profile p where p.uuid = 'PROFILE_UUID_00000000000000000000001'),
        (SELECT r.id FROM oauth.kys_role r WHERE r.code = 'temelRol'));