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;
- Kullanıcı Detay Tipi Ekleme
- Kullanıcı Detay Ekleme
- Kullanıcı Ekleme
- Profil Detay Tipi Ekleme
- Profil Detay Ekleme
- Profil Ekleme
- Profil-Profil Detay (ilişkilendirme) Ekleme
- Yetki Ekleme
- Etiket Ekleme (Zorunlu Değil)
- Etiket-Yetki (ilişkilendirme) Ekleme (Zorunlu Değil)
- Rol Ekleme
- Rol-Yetki (ilişkilendirme) Ekleme
- Profil-Rol (ilişkilendirme) Ekleme
-
Varolan Kullanıcıya Yeni Profil Ekleme Sırasıyla;
- Profil Detay Tipi Ekleme
- Profil Detayı Ekleme
- Profil Ekleme
- Profil-Profil Detay (ilişkilendirme) Ekleme
- Yetki Ekleme
- Etiket Ekleme (Zorunlu Değil)
- Etiket-Yetki (ilişkilendirme) Ekleme (Zorunlu Değil)
- Rol Ekleme
- Rol-Yetki (ilişkilendirme) Ekleme
- Profil-Rol (ilişkilendirme) Ekleme
-
Varolan Profile Rol Ekleme Sırasıyla;
- Yetki Ekleme
- Etiket Ekleme (Zorunlu Değil)
- Etiket-Yetki (ilişkilendirme) Ekleme (Zorunlu Değil)
- Rol Ekleme
- Rol-Yetki (ilişkilendirme) Ekleme
- 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.
Ö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, 'keysis', '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, 'keysis: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'));