Please note that this project is unofficial and not endorsed by Microsoft. It is not intended for production use.
Clone the repo and run from the root of the project:
docker compose up -d(Leave off the -d to run in your current terminal instead of in background/detached mode.)
Use the following connection string to connect to the emulator:
Endpoint=http://localhost:18080;Id=abcd;Secret=c2VjcmV0
- Run
./keygen.shto generate the HTTPS keypair (Linux/macOS/WSL; Windows instructions TODO) - Run
dotnet runfrom thesrc/AzureAppConfigurationEmulatorfolder, or start the app from your IDE, adjusting the port in the connection string
Add the following code as a Pre-request Script in Postman to authenticate with the emulator:
const credential = "abcd";
const secret = "c2VjcmV0";
const date = new Date().toUTCString();
const contentHash = CryptoJS.SHA256(CryptoJS.enc.Utf8.parse(pm.request.body.toString())).toString(CryptoJS.enc.Base64);
const signedHeaders = "x-ms-date;Host;x-ms-content-sha256";
const stringToSign = `${pm.request.method}\n${pm.request.url.getPathWithQuery()}\n${date};${pm.request.url.getRemote()};${contentHash}`;
const signature = CryptoJS.HmacSHA256(CryptoJS.enc.Utf8.parse(stringToSign), CryptoJS.enc.Base64.parse(secret)).toString(CryptoJS.enc.Base64);
pm.request.headers.upsert(`x-ms-date: ${date}`);
pm.request.headers.upsert(`x-ms-content-sha256: ${contentHash}`);
pm.request.headers.upsert(`Authorization: HMAC-SHA256 Credential=${credential}&SignedHeaders=${signedHeaders}&Signature=${signature}`);| Operation | |
|---|---|
| Get | ✔️ |
| Get (Conditionally) | ✔️ |
| List | ✔️ |
| List (Pagination) | ❌ |
| List (Filtering) | ✔️ |
| List (Select Fields) | ❌ |
| List (Time-Based Access) | ❌ |
| Set | ✔️ |
| Set (Conditionally) | ✔️ |
| Delete | ✔️ |
| Delete (Conditionally) | ✔️ |
| Operation | |
|---|---|
| List | ✔️ |
| List (Pagination) | ❌ |
| List (Filtering) | ✔️ |
| List (Select Fields) | ❌ |
| List (Time-Based Access) | ❌ |
| Operation | |
|---|---|
| List | ✔️ |
| List (Pagination) | ❌ |
| List (Filtering) | ✔️ |
| List (Select Fields) | ❌ |
| List (Time-Based Access) | ❌ |
| Operation | |
|---|---|
| Lock | ✔️ |
| Lock (Conditionally) | ✔️ |
| Unlock | ✔️ |
| Unlock (Conditionally) | ✔️ |
| Operation | |
|---|---|
| List | ❌ |
| List (Pagination) | ❌ |
| List (Range) | ❌ |
| List (Filtering) | ❌ |
| List (Select Fields) | ❌ |
| List (Time-Based Access) | ❌ |