Aracılığıyla paylaş


Web uygulaması oluşturmak için Azure DevOps OAuth 2.0 kullanma

Azure DevOps Services

Önemli

Azure DevOps OAuth, 2026'da kullanımdan kaldırılıyor. Bu bilgiler yalnızca mevcut Azure DevOps OAuth uygulamalarına yöneliktir. Yeni uygulamalar oluşturmak için Microsoft Entra ID OAuth kullanarak Azure DevOps ile tümleştirin. Nisan 2025'den itibaren yeni Azure DevOps OAuth uygulamalarını kabul etmeyi durduracağız. Blog gönderimizden daha fazla bilgi edinin.

Azure DevOps, OAuth 2.0 uygulamaları için bir kimlik sağlayıcısıdır. OAuth 2.0 uygulamamız, geliştiricilerin uygulamalarını kullanıcılar için yetkilendirmesine ve Azure DevOps kaynakları için erişim belirteçleri almasına olanak tanır.

Azure DevOps OAuth'u kullanmaya başlama

1. Uygulamanızı kaydetme

  1. Uygulamanızı kaydetmek için adresine https://app.vsaex.visualstudio.com/app/register gidin.

  2. Uygulamanızın ihtiyaç duyduğu kapsamları seçin ve uygulamanızı yetkilerken aynı kapsamları kullanın. Uygulamanızı önizleme API'lerini kullanarak kaydettiyseniz, kullandığınız kapsamlar artık kullanım dışı olduğundan yeniden kaydedin.

  3. Uygulama oluştur'u seçin.

    Uygulama ayarları sayfası görüntülenir.

    Uygulamanızın Uygulama ayarlarını gösteren ekran görüntüsü.

    • Azure DevOps Services yetkilendirme onay sayfasını kullanıcınıza sunduğunda şirketinizin adını, uygulama adını ve açıklamalarını kullanır. Ayrıca şirketinizin web sitesi, uygulama web sitesi ve hizmet koşulları ile gizlilik bildirimleri için URL'leri kullanır.

      Şirket ve uygulama bilgilerinizi içeren Visual Studio Codespaces yetkilendirme sayfasını gösteren ekran görüntüsü.

    • Azure DevOps Services bir kullanıcının yetkilendirmesini istediğinde ve kullanıcı bunu onayladığında, kullanıcının tarayıcısı yetkilendirme koduyla yetkilendirme geri çağırma URL'nize yönlendirilir. Kodu uygulamaya geri aktarmak ve uygulamanızda kayıtlı URL ile tam olarak eşleştirmek için geri arama URL'si güvenli bir bağlantı (https) olmalıdır. Aksi takdirde, kullanıcıdan uygulamanıza yetkilendirme vermesini isteyen bir sayfa yerine 400 hata sayfası görüntülenir.

  4. Bir kullanıcının uygulamanızı kuruluşuna erişmesi için yetkilendirmesini istediğinizde yetkilendirme URL'sini çağırın ve uygulama kimliğinizi ve yetkili kapsamlarınızı geçirin. Azure DevOps Services REST API'sini çağırmak için erişim belirteci almak istediğinizde erişim belirteci URL'sini çağırın.

Kaydettiğiniz her uygulamanın ayarlarına profilinizden https://app.vssps.visualstudio.com/profile/viewulaşabilirsiniz.

2. Uygulamanızı yetkilendirme

  1. Kullanıcınız uygulamanıza kuruluşuna erişim yetkisi vermemişse yetkilendirme URL'sini çağırın. Kullanıcı yetkilendirmeyi onaylarsa sizi bir yetkilendirme koduyla geri çağırır.
https://app.vssps.visualstudio.com/oauth2/authorize
        ?client_id={app ID}
        &response_type={Assertion}
        &state={state}
        &scope={scope}
        &redirect_uri={callback URL}
Parametre Türü Notlar
müşteri_kimliği GUID Kayıtlıyken uygulamanıza atanan kimlik.
yanıt_tipi Dize Assertion
devlet Dize Herhangi bir değer olabilir. Genellikle, geri çağırmayı ilişkili yetkilendirme isteğiyle ilişkilendiren oluşturulan bir dize değeridir.
kapsam Dize Uygulamaya kayıtlı kapsamlar. Boşlukla ayrılmış. Kullanılabilir kapsamlara bakın.
yönlendirme_uri URL Uygulamanız için geri arama URL'si. Uygulamayla kaydedilen URL ile tam olarak eşleşmelidir.
  1. Kullanıcıyı Azure DevOps Services yetkilendirme uç noktasına götüren bir bağlantı veya düğme ekleyin:
https://app.vssps.visualstudio.com/oauth2/authorize
        ?client_id=00001111-aaaa-2222-bbbb-3333cccc4444
        &response_type=Assertion
        &state=User1
        &scope=vso.work%20vso.code_write
        &redirect_uri=https://fabrikam.azurewebsites.net/myapp/oauth-callback

Azure DevOps Services, kullanıcıdan uygulamanızı yetkilendirmesini ister.

Kullanıcının kabul ettigini varsayarsak Azure DevOps Services, kısa süreli yetkilendirme kodu ve yetkilendirme URL'sinde sağlanan durum değeri de dahil olmak üzere kullanıcının tarayıcısını geri çağırma URL'nize yönlendirir:

https://fabrikam.azurewebsites.net/myapp/oauth-callback
        ?code={authorization code}
        &state=User1

3. Kullanıcı için erişim ve yenileme belirteci alma

Kullanıcı için erişim belirteci (ve yenileme belirteci) istemek için yetkilendirme kodunu kullanın. Hizmetinizin Azure DevOps Services'e hizmet-hizmet HTTP isteğinde bulunması gerekir.

URL - uygulamayı yetkilendirme

POST https://app.vssps.visualstudio.com/oauth2/token

HTTP isteği üst bilgileri - uygulamayı yetkilendirme

Başlık Değer
İçerik Türü application/x-www-form-urlencoded
Content-Type: application/x-www-form-urlencoded

HTTP isteği gövdesi - uygulamayı yetkilendirme

client_assertion_type=urn:ietf:params:oauth:client-assertion-type:jwt-bearer&client_assertion={0}&grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer&assertion={1}&redirect_uri={2}

Önceki örnek istek gövdesindeki yer tutucu değerlerini değiştirin:

  • {0}: Uygulama kaydedildiğinde alınan URL kodlu istemci gizli anahtarı
  • {1}: Sorgu parametresi aracılığıyla code geri çağırma URL'nize sağlanan URL kodlanmış "kod"
  • {2}: uygulamaya kayıtlı geri çağırma URL'si

İstek gövdesini oluşturmak için C# örneği - uygulamayı yetkilendirme

public string GenerateRequestPostData(string appSecret, string authCode, string callbackUrl)
{
   return String.Format("client_assertion_type=urn:ietf:params:oauth:client-assertion-type:jwt-bearer&client_assertion={0}&grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer&assertion={1}&redirect_uri={2}",
               HttpUtility.UrlEncode(appSecret),
               HttpUtility.UrlEncode(authCode),
               callbackUrl
        );
}

Yanıt - uygulamayı yetkilendirme

{
    "access_token": { access token for the user },
    "token_type": { type of token },
    "expires_in": { time in seconds that the token remains valid },
    "refresh_token": { refresh token to use to acquire a new access token }
}

Not

Uygulamanızın kullanıcıdan yeniden yetkilendirmesini istemesine gerek olmaması için refresh_token güvenli bir şekilde kalıcı hale getirmek. Erişim belirteçlerinin süresi hızla sona erer ve saklanmamalıdır.

4. Erişim belirtecini kullanın

Erişim belirtecini kullanmak için HTTP isteğinizin Yetkilendirme üst bilgisine taşıyıcı belirteç olarak ekleyin:

Authorization: Bearer {access_token}

Örneğin, bir proje için son derlemeleri almak için HTTP isteği:

GET https://dev.azure.com/myaccount/myproject/_apis/build-release/builds?api-version=3.0
Authorization: Bearer {access_token}

5. Süresi dolan erişim belirtecini yenileme

Kullanıcının erişim belirtecinin süresi dolarsa, yetkilendirme akışında edindikleri yenileme belirtecini kullanarak yeni bir erişim belirteci alabilirsiniz. Bu, bir erişim ve yenileme belirtecinin yetkilendirme kodunun değişmesine yönelik özgün işlem gibidir.

URL - yenileme belirteci

POST https://app.vssps.visualstudio.com/oauth2/token

HTTP istek başlıkları - yenileme belirteci

Başlık Değer
İçerik türü application/x-www-form-urlencoded
İçerik uzunluğu İstek gövdesinin hesaplanan dize uzunluğu (aşağıdaki örne bakın)
Content-Type: application/x-www-form-urlencoded
Content-Length: 1654

HTTP isteği gövdesi - yenileme belirteci

client_assertion_type=urn:ietf:params:oauth:client-assertion-type:jwt-bearer&client_assertion={0}&grant_type=refresh_token&assertion={1}&redirect_uri={2}

Önceki örnek istek gövdesindeki yer tutucu değerlerini değiştirin:

  • {0}: Uygulama kaydedildiğinde alınan URL kodlu istemci gizli anahtarı
  • {1}: Kullanıcı için URL ile kodlanmış yenileme belirteci
  • {2}: uygulamaya kayıtlı geri çağırma URL'si

Yanıt - yenileme belirteci

{
    "access_token": { access token for this user },
    "token_type": { type of token },
    "expires_in": { time in seconds that the token remains valid },
    "refresh_token": { new refresh token to use when the token has timed out }
}

Not

Kullanıcı için yeni bir yenileme belirteci verilir. Bu yeni belirteci saklayın ve kullanıcı için yeni bir erişim belirteci almanız gerektiğinde kullanın.

Örnekler

C# OAuth GitHub Örneğimizde Azure DevOps Services REST API'lerini çağırmak için OAuth uygulayan bir C# örneği bulabilirsiniz.

İstemci gizli anahtarını yeniden oluştur

Uygulama gizliliklerinin süresi her 60 günde düzenli olarak dolar (Mart 2025 itibarıyla). İstediğiniz zaman iki sırrınız olabilir. Uygulama gizli anahtarınızın süresi dolmak üzereyken, onu yeni bir uygulama gizli anahtarıyla değiştirerek erişim belirteçleri oluşturmaya, kullanmaya ve belirteçleri yenilemeye devam edin. Bu işlem Visual Studio profilindeki uygulamanın kayıt sayfasından veya Kayıt Gizli Dizisi API'leri aracılığıyla yapılabilir. API'leri kullanmak için kapsamıyla bir vso.tokensEntra erişim belirteci kullanmanız gerekir.

  1. "Gizli Dizi 2" için "Gizli Dizi Oluştur" seçeneğini belirleyerek ikincil bir gizli dizi oluşturun. ( Kayıt Gizli Anahtarı Oluşturma API'sini kullanın.)

İkincil gizli dizi önceden oluşturulmuş uygulama sayfasının ekran görüntüsü.

  1. Ardından, bu eylemi tamamlamak istediğinizi onaylayın.

Gizli yenilenmeyi onaylayan ekran görüntüsü.

  1. Gizli Dizi #1'in süresi dolmadan önce uygulamanızı yeni Gizli Dizi #2'yi kullanacak şekilde güncelleştirin. İki gizliyi aynı anda yöneterek, süresi dolan gizliler nedeniyle kullanıcılarınızda bir kapalı kalma süresi oluşmaz.

  2. Gizli dizi #1 doğal olarak sona erer ve önceki tüm belirteçler çalışmaz.

  3. Süresi dolmak üzere olan bir Gizli Dizi #2'yi döndürme zamanı geldiğinde, Gizli Dizi #1'i yeniden oluşturarak ve 2. Gizli Dizi yerine yeniden oluşturulan Gizli Dizi #1'i kullanarak bu işlemi yineleyebilirsiniz. (Kayıt Gizli Anahtarı Döndürme API'sini kullanın.)

Gizli bilgiler sızdırılırsa, "Gizli Bilgiyi Yeniden Oluştur" seçeneğine tıklayarak gizli bilgiyi hızla iptal edebilirsiniz. Yeniden oluşturmak istediğinizi onayladıktan sonra, önceki uygulama güvenlik anahtarı geçersiz olur ve bu anahtarla oluşturulmuş tüm eski belirteçler de çalışmayı durdurur. Yeniden oluşturma yoluyla sızdırılan gizli anahtarı iptal ederken kapalı kalma süresini en aza indirmek için çiftli anahtar döndürme yöntemini kullanın.

Uygulamanızı silme

Artık uygulamanız gerekmiyorsa profilinizden silin.

  1. Profilinize şu konumda gidin: https://app.vssps.visualstudio.com/profile/view.

  2. Kenar çubuğunda adınızın altındaki açılan menüden seçim yaparak doğru kiracının sayfasında olduğunuzdan emin olun.

  3. Sol kenar çubuğundaki Uygulamalar ve hizmetler üst bilgisinin altında uygulamayı bulun.

  4. uygulama kayıt sayfasında "Sil"i seçin. Silme işleminizi onaylamak için bir pencere görünür.

    Sil düğmesinin vurgulandığı uygulama meta verileri sayfasının ekran görüntüsü

  5. Uygulama kaydını sildiğinizde uygulama çalışmaya son verir ve bu uygulama için yeni belirteçleri basmayı ya da basılmış belirteçleri kabul etmeyi durdururuz.

Sık sorulan sorular (SSS)

S: Cep telefonu uygulamamla OAuth kullanabilir miyim?

Y: Hayır. Azure DevOps Services yalnızca web sunucusu akışını desteklediğinden, OAuth'u uygulamanın bir yolu yoktur çünkü uygulama sırrınızı güvenli bir şekilde depolayamazsınız.

S: Kodumda hangi hataları veya özel koşulları işlemem gerekiyor?

Y: Aşağıdaki koşulları işlediğinize emin olun:

  • Kullanıcınız uygulama erişiminizi reddederse, hiçbir yetkilendirme kodu döndürülemez. Reddetme denetimi yapmadan yetkilendirme kodunu kullanmayın.
  • Kullanıcınız uygulamanızın yetkilendirmesini iptal ederse erişim belirteci artık geçerli olmaz. Uygulamanız verilere erişmek için belirteci kullandığında 401 hatası döndürülüyor. Yetkilendirmeyi yeniden isteyin.

S: Web uygulamamda yerel olarak hata ayıklamak istiyorum. Uygulamamı kaydederken geri çağırma URL'si için localhost kullanabilir miyim?

Y: Evet. Azure DevOps Services artık geri arama URL'nizde localhost'a izin veriyor. Uygulamanızı kaydederken geri arama URL'nizin başlangıcı olarak kullandığınızdan https://localhost emin olun.

S: Erişim belirteci almaya çalıştığımda HTTP 400 hatası alıyorum. Sorun ne olabilir?

Y: İçerik türünü istek üst bilginizde application/x-www-form-urlencoded olarak ayarladığınızdan denetleyin.

S: OAuth tabanlı erişim belirteci kullandığımda HTTP 401 hatası alıyorum, ancak aynı kapsama sahip bir PAT düzgün çalışıyor. Neden?

A: Kuruluşunuzun yöneticisinin OAuth aracılığıyla üçüncü taraf uygulama erişimini devre dışı bırakmadığını doğrulayın . Bu senaryoda, bir uygulamayı yetkilendirme ve erişim belirteci oluşturma akışı çalışır, ancak tüm REST API'leri yalnızca bir hata döndürür, örneğin TF400813: The user "<GUID>" is not authorized to access this resource.