OAuth2
OAuth2 Nedir?
OAuth2, kullanıcının kimliğini harici bir kimlik sağlayıcısında (Google, Microsoft Entra ID, Keycloak, Okta, e-Devlet gibi) doğrulatan Authentication Providers türüdür. Kullanıcı giriş adımında sağlayıcının yetkilendirme sayfasına yönlendirilir, orada giriş yapar ve TR7'ye geri döner; TR7 aldığı yetkilendirme koduyla belirteç alır ve kullanıcı bilgisini okur. Parola TR7'ye hiç gelmez.
Bu türde kimlik, erişim belirteciyle kullanıcı bilgisi uç noktasından alınır. Sağlayıcı OpenID Connect destekliyorsa, kimliği imzası doğrulanan ID belirtecinden okuyan OpenID Connect türü tercih edilir; iki tür aynı formu paylaşır.
Nasıl çalışır?
- Sağlayıcıda (ör. Google Cloud Console, Entra ID) bir uygulama kaydı oluşturulur; Client ID, Client Secret alınır ve TR7'nin Redirect URI adresi kaydedilir.
- TR7'de Provider Type olarak OAuth2 seçilir; OAuth Provider alanından hazır sağlayıcı ya da Custom Provider seçilir ve istemci bilgileri girilir.
- Profil, AGS etkin vService'in erişim akışına Authentication Provider adımı olarak eklenir; kullanıcı
/oauthyolu üzerinden sağlayıcıya yönlendirilir. - Sağlayıcıdan dönen kullanıcı bilgileri otomatik eşlemeyle oturum özniteliklerine yazılır ve akış success geçişinden devam eder.
Hazır OAuth Provider Kataloğu
OAuth Provider alanından hazır bir sağlayıcı seçildiğinde (Apple yalnızca OpenID Connect türünde listelenir) yetkilendirme, belirteç, kullanıcı bilgisi, çıkış ve belirteç iptali adresleri, varsayılan kapsamlar ve PKCE ile istemci doğrulama ayarları TR7 tarafından sağlanır; formda yalnızca istemci bilgileri (Client ID, Client Secret, OAuth Scopes, Redirect URI), sağlayıcıya özgü alanlar ve çıkış anahtarları görünür. Custom Provider seçildiğinde bütün uç noktalar elle girilir.
| OAuth Provider | Ek alan | Çıkış ve iptal anahtarları | Not |
|---|---|---|---|
| e-Devlet | - | Sign Out from Provider on Logout | Kapsamlar ; ile ayrılır; TÜRKSAT ile sözleşme gerektirir |
| Hosted Domain, Access Type, Prompt | Revoke Tokens on Logout | ||
| Microsoft | Tenant (varsayılan common) | Sign Out from Provider on Logout | Entra ID kiracısı: common, organizations, consumers ya da kiracı kimliği veya alan adı |
| GitHub | - | - | |
| GitHub Enterprise | GitHub Enterprise Address (zorunlu) | - | |
| GitLab | GitLab Address (varsayılan https://gitlab.com) | Revoke Tokens on Logout | |
| Keycloak | Realm URL (zorunlu) | Revoke ve Sign out | |
| Okta | Okta Domain (zorunlu) | Revoke ve Sign out | PKCE (S256) açık |
| Auth0 | Auth0 Tenant Address (zorunlu) | Revoke ve Sign out | |
| X (Twitter) | - | Revoke Tokens on Logout | E-posta eşlemesi yoktur; PKCE (S256) açık |
| - | Revoke Tokens on Logout | ||
| - | - | ||
| Yandex | - | - |
Hazır sağlayıcıların uç nokta adresleri profile yazılmaz; her çalışmada TR7'nin kataloğundan uygulanır. Sağlayıcıya özgü alanların varsayılanları (ör. Microsoft Tenant ya da Google Access Type ve Prompt) ise profile kaydedilir. Profili Custom Provider'a çevirmek adres alanlarını boş bırakır.
Sağlayıcıya Özgü Alanlar
Hazır bir sağlayıcı seçildiğinde formda adres alanlarının yerine sağlayıcının gerektirdiği alanlar görüntülenir:
| Alan | Sağlayıcı | Anlamı |
|---|---|---|
| Tenant | Microsoft | Entra ID kiracısı; varsayılan common. |
| GitHub Enterprise Address | GitHub Enterprise | Kurulumun adresi; zorunlu. |
| GitLab Address | GitLab | Kurulumun adresi; varsayılan https://gitlab.com. |
| Realm URL | Keycloak | Realm adresi; zorunlu. |
| Okta Domain | Okta | Okta alan adı; zorunlu. |
| Auth0 Tenant Address | Auth0 | Kiracı adresi; zorunlu. |
| Hosted Domain | Girişin sınırlandırılacağı Google Workspace alan adı. | |
| Access Type | Online (default) ya da Offline (get refresh token). | |
| Prompt | None, Consent ya da Select Account (default). |
Operasyonel En İyi Uygulamalar
- Uç noktalar keşifle. Custom Provider'da adresler elle yazılmak yerine Fetch Endpoints from Issuer ile doldurulmalıdır; yazım hataları giriş akışını sessizce bozar.
- Redirect URI yol olarak. Redirect URI alanına tam adres yerine yol (
/ags-portal/oauthgibi) yazıldığında aynı profil vService'in her alan adında çalışır; adres sağlayıcı tarafında da kayıtlı olmalıdır. - Mümkünse OpenID Connect. Sağlayıcı destekliyorsa OpenID Connect türü seçilmelidir; ID belirteci imzası doğrulanır.
- Kilitleme sağlayıcıda. Kilitleme genellikle sağlayıcı tarafında yapılır; Lockout Behavior için No Lockout ya da Use Gateway Defaults seçilmelidir.
- Çıkışta sağlayıcıdan da çıkış. Paylaşılan bilgisayarların kullanıldığı ortamlarda Sign Out from Provider on Logout açılmalıdır; aksi hâlde kullanıcı bir sonraki girişte parola sorulmadan içeri alınır.
Nasıl Eklenir?
Yeni bir OAuth2 sağlayıcısı, TR7 web yönetim arayüzü üzerinden aşağıdaki adımlarla eklenir:
- Sol altta bulunan TR7 logosuna tıklanarak Configuration Menu açılır.
- AGS → Authentication → Authentication Providers → Add adımları takip edilir.
- Profil için benzersiz ve açıklayıcı bir isim girilir; Provider Type olarak OAuth2 seçilir.
- OAuth Provider seçilir ve istemci bilgileri girilir.
Addbutonuna tıklanarak profil eklenir.
Profil Ekleme Formu
AGS → Authentication → Authentication Providers → Add adımları takip edilerek Provider Type alanında OAuth2 seçildiğinde form aşağıdaki alanlarla açılır.
OAuth2 Seçiliyken Form (Custom Provider)
OAuth2 Formunun Devamı
INFO
Provider Name Zorunlu
Profilin adı; listede, akış şemasındaki adım seçiminde, oturum listesinde ve loglarda profili tanımlar. Ad cihazda benzersiz olmalıdır; aynı adla ikinci bir profil kaydedilmez ve Name is used uyarısı görüntülenir. Boş bırakıldığında Required field uyarısı görüntülenir.
INFO
Provider Type Zorunlu
Sağlayıcı türü; bu sayfada OAuth2 seçilidir. Tür değiştirildiğinde yalnızca yeni türün alanları görüntülenir ve kaydedilir; tür düzenleme formunda da değiştirilir.
INFO
Namespace Varsayılan: varsayılan route tablosu
TR7'nin sağlayıcıya yaptığı belirteç ve kullanıcı bilgisi isteklerinin çıkacağı Route Tables kaydı; internet erişimi olan route tablosu seçilmelidir. Alan cihazın varsayılan route tablosuyla dolu gelir; bu tablonun adı cihaza göre değişir (ör. DEFAULT ya da DEFAULT_ROUTE).
INFO
OAuth Provider Varsayılan: Custom Provider
Hazır sağlayıcılardan biri ya da Custom Provider seçilir (bkz. Hazır OAuth Provider Kataloğu). Hazır sağlayıcı seçildiğinde adres ve protokol alanları gizlenir; yalnızca Client ID, Client Secret, OAuth Scopes, Redirect URI, sağlayıcıya özgü alanlar ve çıkış anahtarları görüntülenir.
INFO
Fetch Endpoints from Issuer
Yalnızca Custom Provider seçiliyken görünen buton; sağlayıcının keşif belgesinden uç noktaları doldurur (bkz. Fetch Endpoints from Issuer).
INFO
Authorization URL Zorunlu (Custom Provider)
Kullanıcının giriş için yönlendirileceği sağlayıcı uç noktası (https://provider.com/oauth/authorize gibi).
INFO
User Info URL Zorunlu (Custom Provider)
Erişim belirteciyle kullanıcı bilgisinin okunduğu uç nokta.
INFO
Logout URL
Sağlayıcının çıkış uç noktası; isteğe bağlıdır. Girildiğinde Sign Out from Provider on Logout anahtarı görüntülenir.
INFO
Token Revocation URL
Sağlayıcının belirteç iptali uç noktası; isteğe bağlıdır. Girildiğinde Revoke Tokens on Logout anahtarı görüntülenir.
INFO
Client Secret
Sağlayıcıda kayıtlı uygulamanın gizli anahtarı; maskeli alana girilir, önizlemede ******** olarak gösterilir. Genel istemcilerde (Client Authentication: Public client — no client secret sent) boş bırakılır.
INFO
OAuth Scopes
İstenecek kapsamlar boşlukla ayrılarak girilir (openid email profile); e-Devlet'te ; ile ayrılır. Hazır sağlayıcılar için varsayılan kapsamlar katalogda tanımlıdır; alan doldurulduğunda girilen değer kullanılır.
INFO
Redirect URI Zorunlu
Sağlayıcının kullanıcıyı geri göndereceği adres. Tam adres ya da yalnızca yol (/ags-portal/oauth gibi) girilir; yol girildiğinde adres, isteğin geldiği şema ve alan adıyla tamamlanır. Aynı adres sağlayıcı tarafındaki uygulama kaydına da yazılmalıdır.
INFO
Client Authentication Varsayılan: client_secret_post
Yalnızca Custom Provider'da görünür. İstemci kimlik bilgilerinin belirteç uç noktasına nasıl gönderileceği seçilir:
| Seçenek | Anlamı |
|---|---|
| Credentials in request body — client_secret_post (default) | Kimlik ve gizli anahtar istek gövdesinde gönderilir. |
| HTTP Basic header — client_secret_basic | Kimlik ve gizli anahtar Authorization: Basic başlığında gönderilir. |
| Public client — no client secret sent | Gizli anahtar gönderilmez; mobil ve tek sayfa uygulamalar gibi genel istemciler için, genellikle PKCE ile birlikte. |
INFO
Enable PKCE Varsayılan: Disabled
Yalnızca Custom Provider'da görünür. Açıldığında yetkilendirme kodunun ele geçirilmesine karşı PKCE koruması uygulanır.
PKCE Challenge Method Varsayılan: SHA256 (Recommended)
Yalnızca Enable PKCE açıkken görüntülenir.
| Seçenek | Anlamı |
|---|---|
| SHA256 (Recommended) | Doğrulayıcı SHA256 ile özetlenerek gönderilir. |
| Plain (Not Recommended) | Doğrulayıcı özetlenmeden gönderilir; yalnızca SHA256 desteklemeyen sağlayıcılar için. |
INFO
User Info Request Method Varsayılan: GET with Bearer header (default)
Yalnızca Custom Provider'da görünür. Kullanıcı bilgisi uç noktasının nasıl çağrılacağı seçilir:
| Seçenek | Anlamı |
|---|---|
| GET with Bearer Header (default) | Belirteç Authorization: Bearer başlığıyla GET isteğinde gönderilir. |
| POST Form Parameters | Bilgiler POST isteğinde form parametresi olarak gönderilir. |
INFO
User Info Parameters Varsayılan: Disabled
Anahtar açıldığında kullanıcı bilgisi isteğine eklenecek ek parametreler için Parameter Name ve Parameter Value tablosu görüntülenir; her satırda iki alan da zorunludur ve Parameter Name değerleri tekrar etmez. Parametreler GET'te sorgu dizesine, POST'ta form gövdesine eklenir. Değerlerde {accessToken}, {clientId}, {clientSecret} ve {scope} yer tutucuları kullanılır.
INFO
Revoke Tokens on Logout Varsayılan: Disabled
Bir belirteç iptali adresi tanımlıyken görünür. Açıkken oturum kapatılırken oturumun belirteçleri sağlayıcının iptal uç noktasına gönderilir; sağlayıcı yanıt vermezse çıkış yine tamamlanır.
INFO
Sign Out from Provider on Logout Varsayılan: Disabled
Bir çıkış adresi tanımlıyken görünür. Açıkken yerel oturum kapatıldıktan sonra tarayıcı sağlayıcının çıkış adresine yönlendirilir; kapalıyken kullanıcı bir sonraki girişte sağlayıcıda hâlâ oturumu açık olduğu için parola sorulmadan içeri alınır.
User Attribute Mapping
INFO
Custom User Attribute Mapping Varsayılan: No customisation
Sağlayıcı yanıtındaki alanların oturum özniteliklerine nasıl eşleneceği yönetilir. Alanın solundaki bilgi çubuğu, seçili sağlayıcı için otomatik eşlenen alan sayısını gösterir; Custom Provider'da bu sayı 15'tir: 15 fields are filled in automatically for this provider. Hazır sağlayıcılarda sayı değişir (ör. Google 8, e-Devlet 9, GitHub 6, X 4). Çubuktaki ok simgesine tıklandığında otomatik eşlenen satırlar ve her birinin JSONata ifadesi listelenir; satır başına ifadeyi JSONata çalışma alanında inceleyen bir çip ile kopyalama işlemleri bulunur. Otomatik eşlemesi olmayan sağlayıcılarda çubukta No automatic mapping for this provider - every attribute has to be mapped below yazar.
Sağdaki anahtar Customised konumuna alındığında AGS Attribute ve Source Attribute tablosu görüntülenir: sol kolonda oturum özniteliği (öneri listesiyle), sağ kolonda sağlayıcı yanıtı üzerinde değerlendirilen JSONata ifadesi girilir. Anahtar açıldığında çubuğun sağında satır ekleyen + Add bağlantısı belirir. Otomatik satırla aynı özniteliği hedefleyen özel satır otomatik olanı geçersiz kılar (replaced below rozeti) ve bilgi çubuğunun metni, kaç otomatik satırın değiştirildiğini de söyleyen … fields are filled in automatically; you replace … of them biçimine döner. AGS'nin standart öznitelikleri dışında bir ad girildiğinde bu öznitelik vService'te özel kullanıcı alanı olarak tanımlanır; _ ile başlayan adlar gizli alan sayılır ve özel kullanıcı alanı üretmez.
Lockout Configuration
INFO
Lockout Behavior Varsayılan: Use gateway defaults
Bu sağlayıcıdaki başarısız denemelerin hangi kilitleme politikalarıyla sayılacağı seçilir:
| Seçenek | Anlamı |
|---|---|
| Use Gateway Defaults | vService'in Default Lockout Policies listesindeki politikalar kullanılır. |
| Replace Defaults | Yalnızca Lockout Policies alanında seçilen politikalar kullanılır. |
| Add to Defaults | vService'in varsayılan politikalarına ek olarak Lockout Policies alanında seçilenler de kullanılır. |
| No Lockout | Bu sağlayıcıda başarısız denemeler sayılmaz, kilitleme yapılmaz. |
Lockout Policies
Replace Defaults ya da Add to Defaults seçiliyken görüntülenir; Account Lockout Policies ekranındaki hazır ve tanımlı politikalar seçilir.
Fetch Endpoints from Issuer
Custom Provider seçili formdaki Fetch Endpoints from Issuer butonu, Issuer URL ve Route Table alanlı bir pencere açar. Girilen yayıncı adresine /.well-known/openid-configuration eklenerek keşif belgesi seçilen route tablosundan (varsayılan: profilin Namespace'i) alınır; tam .well-known adresi de yapıştırılabilir.
Authorization URL ve Token URL her zaman doldurulur; User Info URL, Logout URL ve Token Revocation URL yalnızca keşif belgesinde duyurulmuşsa yazılır. Sağlayıcının duyurduğu openid profile email kapsamları eklenir, duyurulmuşsa Enable PKCE (SHA256) açılır ve Client Authentication için sağlayıcının desteklediği yöntemlerden client_secret_post, client_secret_basic ve none sırasıyla ilki seçilir.
http:// ya da https:// ile başlamayan adresler, yönlendirme yapan adresler, TR7'nin kendi adresleri, HTML sayfa döndüren adresler, 256 KB'ı aşan belgeler ve authorization_endpoint ya da token_endpoint alanını taşımayan belgeler reddedilir; getirme en fazla 8 saniye sürer. Başarı Endpoint fields were filled from the issuer's discovery document iletisiyle bildirilir. Hata iletisi Discovery failed: ile başlar, sağlayıcıdan gelen hatayı taşır ve Tip: enter the provider's identity/issuer address, not its website — it usually starts with accounts., login. or id. ipucuyla biter. İşlem kullanıcı işlem kaydına yazılmaz.
