Bagikan melalui


Menggunakan Azure DevOps OAuth 2.0 untuk membuat aplikasi web

Azure DevOps

Penting

Informasi ini hanya untuk aplikasi Azure DevOps OAuth yang ada. Pengembang aplikasi baru harus menggunakan Microsoft Entra ID OAuth untuk berintegrasi dengan Azure DevOps.

Azure DevOps adalah penyedia identitas untuk aplikasi OAuth 2.0. Implementasi OAuth 2.0 kami memungkinkan pengembang mengotorisasi aplikasi mereka untuk pengguna dan mendapatkan token akses untuk sumber daya Azure DevOps.

Mulai menggunakan Azure DevOps OAuth

1. Daftarkan aplikasi Anda

  1. https://app.vsaex.visualstudio.com/app/register Buka untuk mendaftarkan aplikasi Anda.

  2. Pilih cakupan yang dibutuhkan aplikasi Anda, lalu gunakan cakupan yang sama saat Anda mengotorisasi aplikasi Anda. Jika Anda mendaftarkan aplikasi menggunakan API pratinjau, daftar ulang karena cakupan yang Anda gunakan sekarang tidak digunakan lagi.

  3. Pilih Buat aplikasi.

    Halaman pengaturan aplikasi ditampilkan.

    Screenshot showing Applications settings for your app.

    • Saat Azure DevOps Services menyajikan halaman persetujuan otorisasi kepada pengguna Anda, layanan tersebut menggunakan nama perusahaan, nama aplikasi, dan deskripsi Anda. Ini juga menggunakan URL untuk situs web perusahaan Anda, situs web aplikasi, serta ketentuan layanan dan pernyataan privasi.

      Screenshot showing Visual Studio Codespaces authorization page with your company and app information.

    • Saat Azure DevOps Services meminta otorisasi pengguna, dan pengguna memberikannya, browser pengguna akan diarahkan ke URL panggilan balik otorisasi Anda dengan kode otorisasi. URL panggilan balik harus berupa koneksi aman (https) untuk mentransfer kode kembali ke aplikasi dan sama persis dengan URL yang terdaftar di aplikasi Anda. Jika tidak, halaman kesalahan 400 ditampilkan alih-alih halaman yang meminta pengguna untuk memberikan otorisasi ke aplikasi Anda.

  4. Hubungi URL otorisasi dan berikan ID aplikasi dan cakupan resmi saat Anda ingin meminta pengguna mengotorisasi aplikasi Anda untuk mengakses organisasi mereka. Panggil URL token akses saat Anda ingin mendapatkan token akses untuk memanggil REST API Azure DevOps Services.

Pengaturan untuk setiap aplikasi yang Anda daftarkan tersedia dari profil https://app.vssps.visualstudio.com/profile/viewAnda .

2. Otorisasi aplikasi Anda

  1. Jika pengguna Anda tidak mengotorisasi aplikasi Anda untuk mengakses organisasi mereka, panggil URL otorisasi. Ini memanggil Anda kembali dengan kode otorisasi, jika pengguna menyetujui otorisasi.
https://app.vssps.visualstudio.com/oauth2/authorize
        ?client_id={app ID}
        &response_type={Assertion}
        &state={state}
        &scope={scope}
        &redirect_uri={callback URL}
Parameter Tipe Catatan
client_id GUID ID yang ditetapkan ke aplikasi Anda saat terdaftar.
response_type string Assertion
state string Dapat berupa nilai apa pun. Biasanya nilai string yang dihasilkan yang menghubungkan panggilan balik dengan permintaan otorisasi terkait.
cakupan string Cakupan yang terdaftar di aplikasi. Spasi dipisahkan. Lihat cakupan yang tersedia.
redirect_uri URL URL panggilan balik untuk aplikasi Anda. Harus sama persis dengan URL yang terdaftar di aplikasi.
  1. Tambahkan tautan atau tombol ke situs Anda yang membawa pengguna ke titik akhir otorisasi Azure DevOps Services:
https://app.vssps.visualstudio.com/oauth2/authorize
        ?client_id=88e2dd5f-4e34-45c6-a75d-524eb2a0399e
        &response_type=Assertion
        &state=User1
        &scope=vso.work%20vso.code_write
        &redirect_uri=https://fabrikam.azurewebsites.net/myapp/oauth-callback

Layanan Azure DevOps meminta pengguna untuk mengotorisasi aplikasi Anda.

Dengan asumsi pengguna menerima, Azure DevOps Services mengalihkan browser pengguna ke URL panggilan balik Anda, termasuk kode otorisasi berumur pendek dan nilai status yang disediakan dalam URL otorisasi:

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

3. Dapatkan akses dan refresh token untuk pengguna

Gunakan kode otorisasi untuk meminta token akses (dan token refresh) untuk pengguna. Layanan Anda harus membuat permintaan HTTP layanan ke layanan ke Layanan Azure DevOps.

URL - mengotorisasi aplikasi

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

Header permintaan HTTP - mengotorisasi aplikasi

Header Value
Content-Type application/x-www-form-urlencoded
Content-Type: application/x-www-form-urlencoded

Isi permintaan HTTP - mengotorisasi aplikasi

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}

Ganti nilai tempat penampung di isi permintaan sampel sebelumnya:

  • {0}: Rahasia klien yang dikodekan URL diperoleh ketika aplikasi terdaftar
  • {1}: URL yang dikodekan "kode" yang disediakan melalui code parameter kueri ke URL panggilan balik Anda
  • {2}: URL panggilan balik yang terdaftar di aplikasi

Contoh C# untuk membentuk isi permintaan - mengotorisasi aplikasi

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
        );
}

Respons - mengotorisasi aplikasi

{
    "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 }
}

Penting

Pertahankan refresh_token dengan aman sehingga aplikasi Anda tidak perlu meminta pengguna untuk mengotorisasi lagi. Token akses kedaluwarsa dengan cepat dan tidak boleh dipertahankan.

4. Gunakan token akses

Untuk menggunakan token akses, sertakan sebagai token pembawa di header Otorisasi permintaan HTTP Anda:

Authorization: Bearer {access_token}

Misalnya, permintaan HTTP untuk mendapatkan build terbaru untuk proyek:

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

5. Refresh token akses yang kedaluwarsa

Jika token akses pengguna kedaluwarsa, Anda dapat menggunakan token refresh yang mereka peroleh dalam alur otorisasi untuk mendapatkan token akses baru. Ini seperti proses asli untuk bertukar kode otorisasi untuk akses dan token refresh.

URL - refresh token

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

Header permintaan HTTP - refresh token

Header Value
Content-Type application/x-www-form-urlencoded
Panjang-Konten Panjang string terhitung dari isi permintaan (lihat contoh berikut)
Content-Type: application/x-www-form-urlencoded
Content-Length: 1654

Isi permintaan HTTP - refresh token

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

Ganti nilai tempat penampung di isi permintaan sampel sebelumnya:

  • {0}: Rahasia klien yang dikodekan URL diperoleh ketika aplikasi terdaftar
  • {1}: Token refresh yang dikodekan URL untuk pengguna
  • {2}: URL panggilan balik yang terdaftar di aplikasi

Respons - refresh token

{
    "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 }
}

Penting

Token refresh baru dikeluarkan untuk pengguna. Pertahankan token baru ini dan gunakan saat berikutnya Anda perlu memperoleh token akses baru untuk pengguna.

Sampel

Anda dapat menemukan sampel C# yang mengimplementasikan OAuth untuk memanggil REST API Azure DevOps Services di Sampel GitHub C# OAuth kami.

Meregenerasi rahasia klien

Setiap 5 tahun, rahasia aplikasi Anda akan kedaluwarsa. Anda diharapkan untuk meregenerasi rahasia aplikasi Anda untuk terus dapat membuat dan menggunakan token akses dan token refresh. Untuk melakukannya, Anda dapat mengklik tombol "Regenerasi rahasia", yang akan memunculkan dialog untuk mengonfirmasi bahwa Anda ingin menyelesaikan tindakan ini.

Screenshot confirming secret regeneration.

Ketika Anda mengonfirmasi bahwa Anda ingin meregenerasi, rahasia aplikasi sebelumnya tidak akan lagi berfungsi dan semua token sebelumnya yang ditambang dengan rahasia ini juga akan berhenti berfungsi. Pastikan untuk meluangkan waktu rotasi rahasia klien ini dengan baik untuk meminimalkan waktu henti pelanggan.

Pertanyaan Umum

T: Dapatkah saya menggunakan OAuth dengan aplikasi ponsel saya?

J: Tidak. Azure DevOps Services hanya mendukung alur server web, sehingga tidak ada cara untuk menerapkan OAuth, karena Anda tidak dapat menyimpan rahasia aplikasi dengan aman.

T: Kesalahan atau kondisi khusus apa yang perlu saya tangani dalam kode saya?

A: Pastikan Anda menangani kondisi berikut:

  • Jika pengguna Anda menolak akses aplikasi Anda, tidak ada kode otorisasi yang dikembalikan. Jangan gunakan kode otorisasi tanpa memeriksa penolakan.
  • Jika pengguna Anda mencabut otorisasi aplikasi Anda, token akses tidak lagi valid. Saat aplikasi Anda menggunakan token untuk mengakses data, kesalahan 401 akan kembali. Minta otorisasi lagi.

T: Saya ingin men-debug aplikasi web saya secara lokal. Dapatkah saya menggunakan localhost untuk URL panggilan balik saat mendaftarkan aplikasi saya?

J: Ya. Layanan Azure DevOps sekarang mengizinkan localhost di URL panggilan balik Anda. Pastikan Anda menggunakan https://localhost sebagai awal URL panggilan balik saat mendaftarkan aplikasi.

T: Saya mendapatkan kesalahan HTTP 400 ketika saya mencoba mendapatkan token akses. Apa yang mungkin salah?

A: Periksa apakah Anda mengatur jenis konten ke application/x-www-form-urlencoded di header permintaan Anda.

T: Saya mendapatkan kesalahan HTTP 401 saat menggunakan token akses berbasis OAuth, tetapi PAT dengan cakupan yang sama berfungsi dengan baik. Mengapa?

A: Verifikasi bahwa akses aplikasi pihak ketiga melalui OAuth tidak dinonaktifkan oleh admin organisasi Anda di https://dev.azure.com/{your-org-name}/_settings/organizationPolicy. Dalam skenario ini, alur untuk mengotorisasi aplikasi dan menghasilkan token akses berfungsi, tetapi semua REST API hanya mengembalikan kesalahan, seperti TF400813: The user "<GUID>" is not authorized to access this resource.

T: Dapatkah saya menggunakan OAuth dengan titik akhir SOAP dan REST API?

J: Tidak. OAuth hanya didukung di REST API pada saat ini.

T: Bagaimana cara mendapatkan detail lampiran untuk item kerja saya menggunakan REST API Azure DevOps?

A: Pertama, dapatkan detail item kerja dengan Item kerja - Dapatkan REST API item kerja:

GET https://dev.azure.com/{organization}/{project}/_apis/wit/workitems/{id}

Untuk mendapatkan detail lampiran, Anda perlu menambahkan parameter berikut ke URL:

$expand=all

Dengan hasilnya, Anda mendapatkan properti relasi. Di sana Anda dapat menemukan URL lampiran, dan di dalam URL Anda dapat menemukan ID. Misalnya:

$url = https://dev.azure.com/{organization}/{project}/_apis/wit/workitems/434?$expand=all&api-version=5.0

$workItem = Invoke-RestMethod -Uri $url -Method Get -ContentType application/json

$split = ($workitem.relations.url).Split('/')

$attachmentId = $split[$split.count - 1]

# Result: 1244nhsfs-ff3f-25gg-j64t-fahs23vfs