Meminta token akses di Azure Active Directory B2C

Token akses berisi klaim yang dapat Anda gunakan di Azure Active Directory B2C (AAD B2C) untuk mengidentifikasi izin yang diberikan ke API Anda. Untuk memanggil server sumber daya, permintaan HTTP harus menyertakan token akses. Token akses dilambangkan sebagai access_token dalam tanggapan dari AAD B2C.

Artikel ini memperlihatkan kepada Anda cara meminta token akses untuk aplikasi web dan API web. Untuk informasi selengkapnya tentang token di AAD B2C, lihat gambaran umum token di Azure Active Directory B2C.

Catatan

Rantai API Web (Atas Nama) tidak didukung oleh Azure AD B2C - Banyak arsitektur menyertakan API web yang perlu memanggil API web hilir lainnya, keduanya diamankan oleh Azure AD B2C. Skenario ini umum terjadi pada klien yang memiliki ujung belakang API web, yang pada gilirannya memanggil layanan lain. Skenario API web berantai ini dapat didukung dengan menggunakan pemberian Informasi Masuk Token Pembawa OAuth 2.0 JWT, yang juga dikenal sebagai alur On-Behalf-Of. Namun, alur On-Behalf-Of saat ini tidak diterapkan di AAD B2C. Meskipun On-Behalf-Of berfungsi untuk aplikasi yang terdaftar di ID Microsoft Entra, itu tidak berfungsi untuk aplikasi yang terdaftar di Azure AD B2C, terlepas dari penyewa (ID Microsoft Entra atau Azure AD B2C) yang mengeluarkan token.

Prasyarat

Cakupan

Cakupan menyediakan cara untuk mengelola izin ke sumber daya yang dilindungi. Ketika token akses diminta, aplikasi klien perlu menentukan izin yang diinginkan dalam parameter cakupan permintaan. Misalnya, untuk menentukan Nilai Cakupan dari read untuk API yang memiliki URI ID Aplikasi dari https://contoso.onmicrosoft.com/api, cakupannya adalah https://contoso.onmicrosoft.com/api/read.

Cakupan digunakan oleh API web untuk menerapkan kontrol akses berbasis cakupan. Misalnya, pengguna API web dapat memiliki akses baca dan tulis, atau pengguna API web mungkin hanya memiliki akses baca. Untuk memperoleh beberapa izin dalam permintaan yang sama, Anda dapat menambahkan beberapa entri dalam parameter cakupan tunggal permintaan, dipisahkan oleh spasi.

Contoh berikut menunjukkan cakupan yang dikodekan dalam URL:

scope=https://contoso.onmicrosoft.com/api/read openid offline_access

Contoh berikut menunjukkan cakupan yang dikodekan dalam URL:

scope=https%3A%2F%2Fcontoso.onmicrosoft.com%2Fapi%2Fread%20openid%20offline_access

Jika Anda meminta lebih banyak cakupan daripada apa yang diberikan untuk aplikasi klien Anda, panggilan berhasil jika setidaknya satu izin diberikan. Klaim scp dalam token akses yang dihasilkan hanya diisi dengan izin yang berhasil diberikan.

Cakupan OpenID Connect

Standar OpenID Connect menentukan beberapa nilai cakupan khusus. Cakupan berikut mewakili izin untuk mengakses profil pengguna:

  • openid - Meminta ID token.
  • offline_access - Meminta token refresh menggunakan alur Kode Otorisasi.
  • 00000000-0000-0000-0000-000000000000 - Menggunakan ID klien sebagai cakupan menunjukkan bahwa aplikasi Anda membutuhkan token akses yang dapat digunakan terhadap layanan atau API web Anda sendiri, yang diwakili oleh ID klien yang sama.

Jika parameter response_type dalam permintaan /authorize termasuk token, parameter cakupan harus menyertakan setidaknya satu cakupan sumber daya selain openid dan offline_access yang akan diberikan. Jika tidak, permintaan /authorize gagal.

Meminta token

Untuk meminta token akses, Anda memerlukan kode otorisasi. Berikut ini adalah contoh permintaan ke /authorize titik akhir untuk kode otorisasi:

GET https://<tenant-name>.b2clogin.com/<tenant-name>.onmicrosoft.com/<policy-name>/oauth2/v2.0/authorize?
client_id=<application-ID>
&nonce=anyRandomValue
&redirect_uri=https://jwt.ms
&scope=<application-ID-URI>/<scope-name>
&response_type=code

Ganti nilai dalam string kueri sebagai berikut:

  • <tenant-name> - Nama penyewa Azure AD B2C. Jika Anda menggunakan domain kustom, ganti tenant-name.b2clogin.com dengan domain Anda, seperti contoso.com.
  • <policy-name> - Nama kebijakan kustom atau alur pengguna Anda.
  • <application-ID> - Pengidentifikasi aplikasi dari aplikasi web yang Anda daftarkan untuk mendukung alur pengguna.
  • <application-ID-URI> - URI pengidentifikasi aplikasi yang Anda atur di bawah bilah Paparkan API aplikasi klien.
  • <scope-name> - Nama cakupan yang Anda tambahkan di bawah bilah Paparkan API aplikasi klien.
  • <redirect-uri> - URI Pengalihan yang Anda masukkan ketika Anda mendaftarkan aplikasi klien.

Untuk merasakan cara kerja permintaan, tempelkan permintaan ke browser Anda dan jalankan.

Ini adalah bagian interaktif dari alur, tempat Anda mengambil tindakan. Anda diminta untuk menyelesaikan alur kerja alur pengguna. Ini mungkin perlu memasukkan nama pengguna dan kata sandi Anda dalam formulir masuk atau sejumlah langkah lainnya. Langkah-langkah yang Anda selesaikan tergantung cara alur pengguna ditentukan.

Respons dengan kode otorisasi harus mirip dengan contoh ini:

https://jwt.ms/?code=eyJraWQiOiJjcGltY29yZV8wOTI1MjAxNSIsInZlciI6IjEuMC...

Setelah berhasil menerima kode otorisasi, Anda dapat menggunakannya untuk meminta token akses. Parameter berada di isi permintaan HTTP POST:

POST <tenant-name>.b2clogin.com/<tenant-name>.onmicrosoft.com/<policy-name>/oauth2/v2.0/token HTTP/1.1
Host: <tenant-name>.b2clogin.com
Content-Type: application/x-www-form-urlencoded

grant_type=authorization_code
&client_id=<application-ID>
&scope=<application-ID-URI>/<scope-name>
&code=eyJraWQiOiJjcGltY29yZV8wOTI1MjAxNSIsInZlciI6IjEuMC...
&redirect_uri=https://jwt.ms
&client_secret=2hMG2-_:y12n10vwH...

Jika Anda ingin menguji permintaan HTTP POST ini, Anda dapat menggunakan klien HTTP apa pun seperti Microsoft PowerShell atau Postman.

Respons token yang sukses terlihat seperti ini:

{
    "access_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImtpZCI6Ilg1ZVhrN...",
    "token_type": "Bearer",
    "not_before": 1549647431,
    "expires_in": 3600,
    "expires_on": 1549651031,
    "resource": "f2a76e08-93f2-4350-833c-965c02483b11",
    "profile_info": "eyJ2ZXIiOiIxLjAiLCJ0aWQiOiJjNjRhNGY3ZC0zMDkxLTRjNzMtYTcyMi1hM2YwNjk0Z..."
}

Saat menggunakan https://jwt.ms untuk memeriksa token akses yang dikembalikan, Anda akan melihat sesuatu yang mirip dengan contoh berikut:

{
  "typ": "JWT",
  "alg": "RS256",
  "kid": "X5eXk4xyojNFum1kl2Ytv8dl..."
}.{
  "iss": "https://contoso0926tenant.b2clogin.com/c64a4f7d-3091-4c73-a7.../v2.0/",
  "exp": 1549651031,
  "nbf": 1549647431,
  "aud": "f2a76e08-93f2-4350-833c-965...",
  "oid": "1558f87f-452b-4757-bcd1-883...",
  "sub": "1558f87f-452b-4757-bcd1-883...",
  "name": "David",
  "tfp": "B2C_1_signupsignin1",
  "nonce": "anyRandomValue",
  "scp": "read",
  "azp": "38307aee-303c-4fff-8087-d8d2...",
  "ver": "1.0",
  "iat": 1549647431
}.[Signature]

Langkah berikutnya