Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Menambahkan konteks
Konteks adalah informasi yang relevan dengan keputusan kebijakan, tetapi bukan bagian dari identitas prinsip, tindakan, atau sumber daya Anda. Klaim token akses adalah konteks. Anda mungkin ingin mengizinkan tindakan hanya dari sekumpulan alamat IP sumber, atau hanya jika pengguna Anda telah masuk dengan MFA. Aplikasi Anda memiliki akses ke data sesi kontekstual ini dan harus mengisinya ke permintaan otorisasi. Data konteks dalam permintaan otorisasi Izin Terverifikasi harus JSON-formatted berada dalam contextMap elemen.
Contoh yang menggambarkan konten ini berasal dari toko kebijakan sampel. Untuk mengikutinya, buat DigitalPetStore penyimpanan kebijakan sampel di lingkungan pengujian Anda.
Objek konteks berikut mendeklarasikan satu dari setiap tipe data Cedar untuk aplikasi berdasarkan penyimpanan DigitalPetStore kebijakan sampel.
"context": {
"contextMap": {
"AccountCodes": {
"set": [
{
"long": 111122223333
},
{
"long": 444455556666
},
{
"long": 123456789012
}
]
},
"approvedBy": {
"entityIdentifier": {
"entityId": "Bob",
"entityType": "DigitalPetStore::User"
}
},
"MfaAuthorized": {
"boolean": true
},
"NetworkInfo": {
"record": {
"IPAddress": {
"string": "192.0.2.178"
},
"Country": {
"string": "United States of America"
},
"SSL": {
"boolean": true
}
}
},
"RequestedOrderCount": {
"long": 4
},
"UserAgent": {
"string": "My UserAgent 1.12"
}
}
}
Jenis data dalam konteks otorisasi
- Boolean
-
Sebuah biner true atau false nilai. Dalam contoh, nilai boolean true for MfaAuthenticated menunjukkan bahwa pelanggan telah melakukan otentikasi multi-faktor sebelum meminta untuk melihat pesanan mereka.
- Mengatur
-
Kumpulan elemen konteks. Anggota set dapat semuanya tipe yang sama, seperti dalam contoh ini, atau dari jenis yang berbeda, termasuk kumpulan bersarang. Dalam contoh, pelanggan dikaitkan dengan 3 akun berbeda.
- String
-
Urutan huruf, angka, atau simbol, terlampir dalam " karakter. Dalam contoh, UserAgent string mewakili browser yang digunakan pelanggan untuk meminta untuk melihat pesanan mereka.
- Panjang
-
Sebuah bilangan bulat. Dalam contoh, RequestedOrderCount menunjukkan bahwa permintaan ini adalah bagian dari batch yang dihasilkan dari pelanggan yang meminta untuk melihat empat pesanan mereka sebelumnya.
- Rekam
-
Kumpulan atribut. Anda harus mendeklarasikan atribut ini dalam konteks permintaan. Penyimpanan kebijakan dengan skema harus menyertakan entitas ini dan atribut entitas dalam skema. Dalam contoh, NetworkInfo catatan berisi informasi tentang IP asal pengguna, geolokasi IP tersebut sebagaimana ditentukan oleh klien, dan enkripsi dalam transit.
- EntityIdentifier
-
Referensi ke entitas dan atribut yang dinyatakan dalam entities elemen permintaan. Dalam contoh, pesanan pengguna disetujui oleh karyawanBob.
Untuk menguji konteks contoh ini di DigitalPetStore aplikasi contoh, Anda harus memperbarui permintaanentities, skema penyimpanan kebijakan, dan kebijakan statis dengan deskripsi Peran Pelang gan - Dapatkan Pesanan.
Memodifikasi DigitalPetStore untuk menerima konteks otorisasi
Awalnya, DigitalPetStore bukan toko kebijakan yang sangat kompleks. Ini tidak menyertakan kebijakan atau atribut konteks yang telah dikonfigurasi sebelumnya untuk mendukung konteks yang telah kami sajikan. Untuk mengevaluasi contoh permintaan otorisasi dengan informasi konteks ini, buat modifikasi berikut pada penyimpanan kebijakan dan permintaan otorisasi Anda. Untuk contoh konteks dengan informasi token akses sebagai konteksnya, lihat Memet akan token Amazon Cognito akses dan Memet akan token akses OIDC.
- Schema
-
Terapkan pembaruan berikut ke skema penyimpanan kebijakan Anda untuk mendukung atribut konteks baru. Per GetOrder barui actions sebagai berikut.
"GetOrder": {
"memberOf": [],
"appliesTo": {
"resourceTypes": [
"Order"
],
"context": {
"type": "Record",
"attributes": {
"AccountCodes": {
"type": "Set",
"required": true,
"element": {
"type": "Long"
}
},
"approvedBy": {
"name": "User",
"required": true,
"type": "Entity"
},
"MfaAuthorized": {
"type": "Boolean",
"required": true
},
"NetworkInfo": {
"type": "NetworkInfo",
"required": true
},
"RequestedOrderCount": {
"type": "Long",
"required": true
},
"UserAgent": {
"required": true,
"type": "String"
}
}
},
"principalTypes": [
"User"
]
}
}
Untuk merefer record ensikan tipe data yang dinamai NetworkInfo dalam konteks permintaan Anda, buat https://docs.cedarpolicy.com/schema/schema.html#schema-commonTypes konstruksi CommonType dalam skema Anda dengan menambahkan yang berikut ke skema Anda sebelumnyaactions. Konstruk commonType si adalah kumpulan atribut bersama yang dapat Anda terapkan ke entitas yang berbeda.
"commonTypes": {
"NetworkInfo": {
"attributes": {
"IPAddress": {
"type": "String",
"required": true
},
"SSL": {
"required": true,
"type": "Boolean"
},
"Country": {
"required": true,
"type": "String"
}
},
"type": "Record"
}
},
- Policy
-
Kebijakan berikut menetapkan kondisi yang harus dipenuhi oleh masing-masing elemen konteks yang disediakan. Ini dibangun di atas kebijakan statis yang ada dengan deskripsi Peran Pelanggan - Dapatkan Pesanan. Kebijakan ini awalnya hanya mensyaratkan bahwa prinsipal yang membuat permintaan adalah pemilik sumber daya.
permit (
principal in DigitalPetStore::Role::"Customer",
action in [DigitalPetStore::Action::"GetOrder"],
resource
) when {
principal == resource.owner &&
context.AccountCodes.contains(111122223333) &&
context.approvedBy in DigitalPetStore::Role::"Employee" &&
context.MfaAuthorized == true &&
context.NetworkInfo.Country like "*United States*" &&
context.NetworkInfo.IPAddress like "192.0.2.*" &&
context.NetworkInfo.SSL == true &&
context.RequestedOrderCount <= 4 &&
context.UserAgent like "*My UserAgent*"
};
Kami sekarang telah mengharuskan permintaan untuk mengambil pesanan memenuhi persyaratan konteks tambahan yang kami tambahkan ke permintaan.
-
Pengguna harus masuk dengan MFA.
-
Browser web pengguna User-Agent harus berisi stringMy UserAgent.
-
Pengguna harus meminta untuk melihat 4 pesanan atau lebih sedikit.
-
Salah satu kode akun pengguna harus111122223333.
-
Alamat IP pengguna harus berasal dari Amerika Serikat, mereka harus berada di sesi terenkripsi, dan alamat IP mereka harus dimulai dengan192.0.2..
-
Seorang karyawan harus menyetujui pesanan mereka. Dalam entities elemen permintaan otorisasi, kami akan mendeklarasikan pengguna Bob yang memiliki peranEmployee.
- Request body
-
Setelah mengonfigurasi penyimpanan kebijakan dengan skema dan kebijakan yang sesuai, Anda dapat menampilkan permintaan otorisasi ini ke operasi API Izin Terverifikasi IsAuthorized. Perhatikan bahwa entities segmen berisi definisiBob, pengguna dengan peranEmployee.
{
"principal": {
"entityType": "DigitalPetStore::User",
"entityId": "Alice"
},
"action": {
"actionType": "DigitalPetStore::Action",
"actionId": "GetOrder"
},
"resource": {
"entityType": "DigitalPetStore::Order",
"entityId": "1234"
},
"context": {
"contextMap": {
"AccountCodes": {
"set": [
{"long": 111122223333},
{"long": 444455556666},
{"long": 123456789012}
]
},
"approvedBy": {
"entityIdentifier": {
"entityId": "Bob",
"entityType": "DigitalPetStore::User"
}
},
"MfaAuthorized": {
"boolean": true
},
"NetworkInfo": {
"record": {
"Country": {"string": "United States of America"},
"IPAddress": {"string": "192.0.2.178"},
"SSL": {"boolean": true}
}
},
"RequestedOrderCount":{
"long": 4
},
"UserAgent": {
"string": "My UserAgent 1.12"
}
}
},
"entities": {
"entityList": [
{
"identifier": {
"entityType": "DigitalPetStore::User",
"entityId": "Alice"
},
"attributes": {
"memberId": {
"string": "801b87f2-1a5c-40b3-b580-eacad506d4e6"
}
},
"parents": [
{
"entityType": "DigitalPetStore::Role",
"entityId": "Customer"
}
]
},
{
"identifier": {
"entityType": "DigitalPetStore::User",
"entityId": "Bob"
},
"attributes": {
"memberId": {
"string": "49d9b81e-735d-429c-989d-93bec0bcfd8b"
}
},
"parents": [
{
"entityType": "DigitalPetStore::Role",
"entityId": "Employee"
}
]
},
{
"identifier": {
"entityType": "DigitalPetStore::Order",
"entityId": "1234"
},
"attributes": {
"owner": {
"entityIdentifier": {
"entityType": "DigitalPetStore::User",
"entityId": "Alice"
}
}
},
"parents": []
}
]
},
"policyStoreId": "PSEXAMPLEabcdefg111111"
}