
Son güncelleme: 20 Temmuz 2026
Quire OAuth 2.0 API, uygulamanın bir kullanıcının Quire hesabı adına işlem yapmasını sağlar ve parolayı saklamanı gerektirmez. Kayıtlı bir OAuth uygulaması (istemci kimliği, sır, Yönlendirme bağlantısı), dört adımlı bir yetkilendirme akışı (yapılandır, yönlendir, yanıtı işle, kodu belirteçle değiştir) ve bir yenileme belirteci döngüsü gerekir, çünkü erişim belirteçleri bir saat sonra sona erer.
Bir kullanıcının Quire verilerini okuyan veya değiştiren bir uygulama geliştirmek tek bir kararla başlar: kullanıcının parolasını hiç görmeden kimlik doğrulamayı nasıl yapacaksın? Quire API bunu OAuth 2.0 ile çözer.
Bu yazı OAuth uygulaması kurulumunu, dört adımlı yetkilendirme akışını, erişim belirteci ve yenileme döngüsünü, ayrıca geliştiricilerin ilk geliştirmede bunu yanlış yapma yollarını adım adım anlatıyor.
Quire OpenAPI'nin 1.0.0 sürümü Ekim 2019'da yayımlandı ve o günden beri kararlı kalıyor. OAuth ile kullanıcılar, uygulamanın Quire içeriğine (görevler, projeler, yorumlar, atamalar, etiketler, bitiş tarihleri) erişmesine izin verir ve sen kimlik bilgilerine hiç dokunmazsın.
Kullanıcı bu erişimi parolasını değiştirmeden istediği zaman iptal edebilir. OAuth gerekliliği ortadan kaldırmadan önce parola saklayan entegrasyonların güvenlik açısından kötü bir kalıp olmasının nedeni buydu.
OAuth API'yi kurmadan önce, API'nin gerçekten doğru araç olduğundan emin ol. 2026'da Quire'ın desteklenen dört entegrasyon yüzeyi var ve her biri farklı bir sorunu çözüyor.
| İhtiyacın... | Kullan | Neden |
|---|---|---|
| Kendi uygulamanda bir kullanıcı adına Quire verilerini okumak veya değiştirmek | Quire OAuth API (bu yazı) | Kullanıcı yetkilendirmesi, tam CRUD erişimi, yoklama gerektirmez |
| Quire'daki olaylara tepki vermek (görev oluşturuldu, durum değişti, yorum eklendi) | Quire Ağ Kancaları | Anlık bildirimli, yoklama yükü yok, hafif kurulum |
| Quire'ı Claude'a veya başka bir yapay zekâ ajanına bağlamak | Quire MCP sunucusu | LLM araçları için standart protokol, hazır sunucuyla gelir |
| Quire'ı bir otomasyon veya BI iş akışına çekmek | OAuth API artı n8n veya Power BI | Oturmuş akışlar, daha az özel kod |
Tipik bir uygulama entegrasyonu geliştiriyorsan (mobil uygulama, web kontrol paneli, senkronizasyon servisi), aradığın şey OAuth API'dir. Yazının geri kalanı bu yolda olduğunu varsayıyor.
Quire API'yi kullanmak için bir OAuth uygulaması oluşturman gerekir.
Uygulama oluşturmak için Quire hesabında oturum açmış olmalısın.
Quire geliştirici uygulama konsoluna git ve Yeni uygulama oluştur düğmesine tıkla.

Uygulamanın ait olacağı Quire Organizasyonunu seç. Organizasyon üyeleri, seçilen organizasyona ait tüm uygulamaları görüntüleyip düzenleyebilir.

Uygulamana bir ad ve Yönlendirme bağlantısı ver. Yönlendirme bağlantısının rolünü biraz sonra ele alacağız. Şimdilik şu bağlantıyı girebilirsin:
http://localhost:3000/callback
Yeni uygulama oluştur düğmesine tıkla. Yeni oluşturduğun OAuth uygulaması geliştirici konsolu sayfasında görünür ve onu daha fazla yapılandırmana olanak tanır.

Özetle, elinde şu üç bilgi olmalı:
http://localhost:3000/callback
Uygulama yapılandırma bilgilerini uygulamanın içinde tut.
const clientId = ':wJoMEodI4fSSR54pfNwIuIzLnaJ';
const clientSecret = 'eb8faf4nyd1wbeconw060e9ejui8zg6w8p1hyoex';
const redirectURI = 'http://localhost:3000/callback';
const authorizationUrl = 'https://quire.io/oauth';
const tokenUrl = 'https://quire.io/oauth/token';
const apiUrl = 'https://quire.io/api';Kullanıcılarını Quire'ın OAuth uç noktası URI'sine yönlendireceğin bir yetkilendirme bağlantısı oluştur. Bu, oturum açmış Quire kullanıcılarının uygulamanın içeriklerine erişmesine izin verebileceği bir web sayfası gösterir.
Örnek bağlantı:
https://quire.io/oauth?client_id=your-client-ID&redirect_uri=your-redirect-uriBir yetkilendirme bağlantısı görünümü şuna benzeyebilir:
var http = require('http');
var url = require('url');
var server = http.createServer(function (req, res) {
var uri = url.parse(req.url, true);
if (uri.pathname == '/') {
//..
} else if (uri.pathname == "/install") {
var authUrl = authorizationUrl
+ '?client_id=' + clientId
+ '&redirect_uri=' + encodeURIComponent(redirectURI);
res.writeHead(200, { 'Content-Type': 'text/html' });
res.write(
'<html><body>'
+ '<a href="' + authUrl + '">Connect Quire</a>'
+ '</body></html>');
res.end();
} else if (uri.pathname == "/callback") {
//...
}
});
server.listen(3000);state parametresi, Siteler Arası İstek Sahteciliği (CSRF) saldırılarını önlemek için kullanılan rastgele bir dizedir. Rastgele bir karakter dizisi üretmelisin. Bu değer, Adım 3'te uygulamana değiştirilmeden geri iletilir.
Uygulaman bu değeri doğrulamalıdır. İsteğe bağlı olsa da bu parametreyi eklemeni önemle öneriyoruz.
Örnek bağlantı:
https://quire.io/oauth?client_id=your-client-ID&redirect_uri=your-redirect-uri&state=lpcl9v94zOAuth 2.0 sunucusu, uygulamanın erişim isteğine redirect_uri içinde belirtilen bağlantıyı kullanarak yanıt verir.
Kullanıcı erişim isteğini onaylarsa yanıt bir yetkilendirme kodu içerir. Onaylamazsa yanıt bir hata mesajı içerir. Web sunucusuna dönen yetkilendirme kodu veya hata mesajı, aşağıda gösterildiği gibi sorgu dizesinde yer alır:
Bir hata yanıtı:
http://localhost:3000/callback?error=access_deniedBir yetkilendirme kodu yanıtı:
http://localhost:3000/callback?code=4/P7q7W91a-oMsCeLvIaQm6bTrgtp7Bir geri çağırma örneği şuna benzeyebilir:
//...
} else if (uri.pathname == "/callback") {
var result = uri.query;
var message = 'Auth fail';
if (result["error_description"] != null) {
message = result["error_description"];
if (result["error"] == 'access_denied') {
//display reject message
}
messageView(res, message);
} else if (result["code"] != null) {
return exchangeAccessToken(result["code"])
.then(function(data) {
var token = data['access_token'];
message = token != null ? 'Success': 'Fail';
messageView(res, message);
});
}
}Kullanıcı uygulamanın redirect_uri adresine geri yönlendirildiğinde, sorgu dizesi parametrelerinde bir code ve state parametresi de bulunur. State, isteği doğrulamak için kullandığın CSRF sahtecilik karşıtı belirtecidir.
Kod ve state değerlerini sorgu dizesi parametrelerinden çıkar. State bu noktada doğrulanabilir.
Bir doğrulama örneği şuna benzeyebilir:
} else if (result["code"] != null) {
if (result["state"] != stateFromSession(res))
return messageView(res, 'invalid state');
return exchangeAccessToken(result["code"])
.then(function(data) {
var token = data['access_token'];
message = token != null ? 'Success': 'Fail';
messageView(res, message);
});
}Uygulaman, çıkardığı yetkilendirme koduyla ve aşağıdaki istek parametreleriyle belirteç uç noktasına bir POST çağrısı yapmalıdır.
| Parametre | Değer |
|---|---|
| grant_type | authorization_code |
| code | {your-authorization-code} |
| client_id | {your-client-ID} |
| client_secret | {your-client-secret} |
| redirect_uri | Adım 2'de redirect_uri belirttiysen zorunludur. Değer, orada kullanılanla birebir aynı olmalıdır. |
Bir erişim belirteci isteği örneği şuna benzeyebilir:
var request = require('request');
function exchangeAccessToken(code) {
return new Promise(function(resolve, reject){
request.post({
url: tokenUrl,
form: {
grant_type: 'authorization_code',
code: code,
client_id: clientId,
client_secret: clientSecret,
redirect_uri: redirectURI
}
},
function (error, httpResponse, body) {
if (error) {
return reject(error);
}
resolve(JSON.parse(body))
});
});
}Yanıt olarak aldığın erişim belirteci JSON biçimindedir.
Örnek yanıt:
{
"access_token":"ACCESS_TOKEN",
"token_type": "bearer",
"expires_in":2592000,
"refresh_token":"REFRESH_TOKEN"
}Belirteci özenle ve kalıcı olarak sakla, çünkü her Quire API çağrısı için ona ihtiyacın var.
Uygulamanda artık kullanıcı adına API çağrıları yapabilecek bir erişim belirteci var.
API çağrısını, erişim belirtecini isteğin başlığında taşıyıcı belirteç (bearer token) olarak ileterek yap.
Bir API çağrısı örneği şuna benzeyebilir:
function getCurrentUser(token) {
return new Promise(function(resolve, reject){
request.get({
url: apiUrl + '/user/id/me',
headers: {
"Authorization": "Bearer " + token
}
},
function (error, httpResponse, body) {
if (error) {
return reject(error);
}
resolve(JSON.parse(body))
});
});
}Örnek yanıt:
{
"email": "john@gmail.cc",
"website": "https://coolwebsites.com",
"id": "My_ID",
"description": "This is *cool*!",
"url": "https://quire.io/u/My_ID",
"nameText": "My Name",
"nameHtml": "My Name",
"descriptionText": "This is cool!",
"descriptionHtml": "This is <i>cool</i>!",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"iconColor": "37",
"name": "My Name",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
}Erişim belirteci bilerek yalnızca kısa süreli kullanım için tasarlanmıştır. Bu, OAuth 2.0'ın önemli bir güvenlik mekanizmasıdır. Yetkilendirme Kodu Akışı kullanıldığında erişim belirteçlerinin ömrü varsayılan olarak bir saattir.
Bir erişim belirtecinin süresi dolduğunda HTTP 401 hatası döner:
{
code: 401,
message: 'Invalid or expired token.'
}Uygulamanın erişim belirtecini yenilemesi gerekir.
function refreshToken(refreshToken) {
return new Promise(function(resolve, reject){
request.post({
url: tokenUrl,
form: {
grant_type: 'refresh_token',
refresh_token: refreshToken,
client_id: clientId,
client_secret: clientSecret
}
},
function (error, httpResponse, body) {
if (error) {
return reject(error);
}
resolve(JSON.parse(body))
});
});
}Alternatif olarak uygulaman kullanıcıyı kimlik doğrulama akışına yeniden yönlendirebilir.
Quire API üzerine geliştirme yapan ekipleri izledikten sonra aynı beş sorunun tekrar ettiğini gördük. Hiçbiri karmaşık değil; hepsi önlenebilir.
1. İstemci sırrını istemci tarafı kodunda saklamak. İstemci sırrı adı üstünde bir sırdır. Bir mobil uygulama ikilisine veya tarayıcı paketine girerse herkes onu çıkarıp uygulamanın kimliğine bürünebilir.
Sır yalnızca kontrol ettiğin bir sunucuda durmalı. Uygulaman tamamen istemci tarafındaysa (tek sayfalı uygulama, mobil), sırrı gömmek yerine OAuth 2.0 PKCE akışını kullan.
2. State parametresini doğrulamayı unutmak. state parametresi CSRF saldırılarını önlemek için vardır. Geri çağırmada doğrulamayı atlarsan, kötü niyetli bir sitenin bir Quire hesabını sessizce bir saldırganın uygulama oturumuyla ilişkilendirmek için kullanabileceği bir açık bırakmış olursun.
state değerini her istek için üret, oturumda sakla ve dönen state eşleşmeyen her geri çağırmayı reddet.
3. Erişim belirtecini kalıcı sanmak. Erişim belirteçleri bir saat sonra sona erer. Belirteci saklayıp hiç yenilemeyen uygulamalar ilk gün sorunsuz çalışır, ikinci gün sessizce bozulur.
Yenileme belirteci döngüsünü herhangi bir şey yayımlamadan önce kur; "kullanıcılar şikâyet edince düzeltiriz" yaması olarak bırakma.
4. Değişiklikler için API'yi yoklamak. Yoklama; hız sınırını, gecikmeyi ve bataryayı tüketir. Quire'daki değişikliklere tepki vermen gerekiyorsa bunun yerine ağ kancalarını kullan.
Ağ kancası olayı sana anında iletir; o olayı fark etmek için yapacağın API çağrısı hiç gerekmez.
5. Yönlendirme bağlantısı izin listesini atlamak. Her OAuth uygulaması kaydı bir Yönlendirme bağlantısı listesi kabul eder. Bunu joker karakterle bırakırsan veya tam olarak yapılandırmazsan, bir saldırgan kendi geri çağırmasını senin yönlendirme hedefin olarak kaydedip yetkilendirme kodlarını ele geçirebilir.
Yalnızca uygulamanın gerçekten kullandığı tam bağlantıları ekle.
API ile ilk kez çalışıyorsan kalıpları öğrenmenin en hızlı yolu, n8n bağlayıcısı gibi mevcut bir entegrasyonu çatallayıp kimlik doğrulama, yenileme ve hata durumlarını nasıl yönettiğini incelemektir.
Bunun yerine başka bir entegrasyon yüzeyine yönelmen gereken üç durum var.
Bunların hiçbiri geçerli değilse aracın OAuth API'dir.
Hayır. Quire API, ücretsiz katman dahil her planda kullanılabilir. Hız sınırları tüm planlarda geçerlidir; uygulama başına güncel sınırlar için API belgelerine göz at.
API, JSON istek ve yanıt gövdelerine sahip HTTP tabanlıdır; bu yüzden bir HTTP istemcisi ve JSON ayrıştırıcısı olan her dil çalışır. Bu yazıdaki örnekler JavaScript ile, ancak aynı akış Python, Go, Ruby, PHP ve başka her dilde aynen çalışır. Resmî bir istemci kütüphanesi yoktur; API yüzeyi küçük olduğu için dilinin HTTP istemcisi etrafında ince bir sarmalayıcı yazmak yaygın kalıptır.
Erişim belirteçleri varsayılan olarak bir saat sonra sona erer. Yenileme belirteçleri daha uzun süre geçerlidir ve kullanıcıya yeniden sormadan yeni erişim belirteçleri almak için kullanılabilir. Yenileme belirteci döngüsünü uygulamana ilk günden ekle.
Evet. OAuth kapsamları, yalnızca uygulamanın ihtiyaç duyduğu izinleri istemeni sağlar. Uygulaman yalnızca görevleri okuyorsa okuma kapsamlarını iste. Quire kullanıcıları istenen kapsamları yetkilendirme sayfasında görür ve istek aşırı görünürse reddedebilir; bu yüzden fazla izin istemek dönüşümü düşürür.
API, bir kullanıcı adına Quire verilerini okumak veya değiştirmek isteyen her uygulama için genel amaçlı bir REST yüzeyidir. MCP sunucusu Claude ve diğer LLM ajanları için özel olarak tasarlanmıştır: kimlik doğrulamayı yönetir, standart bir araç şeması sunar ve OAuth kodunu kendin yazmanı gerektirmez. Geleneksel uygulama entegrasyonları için API'yi, LLM ajan entegrasyonları için MCP'yi kullan.
Quire API için tam OAuth 2.0 akışı bu: OAuth uygulaması kurulumu, dört adımlı yetkilendirme, erişim belirteci kullanımı ve yenileme döngüsü. Geliştiricilerin çalışan bir entegrasyonu yayımlayıp iki gün sonra bozulmasının en yaygın nedeni, yenileme döngüsünü ilk günden kurmak yerine sonraya bırakılacak bir düzeltme saymaktır.
Quire geliştirici uygulama konsolundan başla ya da tam API referansını oku. OAuth kodu yazmak istemiyorsan Quire MCP sunucusu kimlik doğrulamayı senin yerine yönetir ve LLM ajan entegrasyonları için doğru seçimdir.
Olay odaklı entegrasyonlarda ağ kancaları, ilk kez API entegrasyonu yapanların çoğunun sonunda vardığı yoklama kalıbından genellikle daha uygundur. OAuth uygulaması kurmadan hızlıca değişiklik yapmak istersen Quire CLI, proje yönetimi komutlarını doğrudan terminalinden çalıştırır.