Skip to content

Commit e43a9a5

Browse files
SciencePotatoHou Chi Chan
andauthored
docs: clarify provider-neutral setup and authentication guidance (#44)
Co-authored-by: Hou Chi Chan <houchichan@microsoft.com> Copilot-Session: 157d6f01-a878-4628-9f56-a5a6c18d9e0f
1 parent 9b3d299 commit e43a9a5

7 files changed

Lines changed: 37 additions & 21 deletions

File tree

‎TECHNICAL.md‎

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -195,7 +195,7 @@ how code accesses configuration; request fields remain separate from deployment
195195
| `EPP_PROVIDER_SMS_ENDPOINT` | Required for SMS delivery | Provider-approved HTTPS SMS endpoint. Guided setup writes the complete send URL from the selected regional profile. |
196196
| `EPP_PROVIDER_VOICE_ENDPOINT` | Required for voice delivery | Provider-approved HTTPS voice endpoint, which can differ from the SMS endpoint. Guided setup writes the complete send URL. |
197197
| `EPP_PROVIDER_ENDPOINT_REGION` | Guided deployment metadata | Selected `global` or `eu` route label. |
198-
| `EPP_PROVIDER_AUTH_MODE` | Live delivery | Must match the adapter: `apiKey` for Telesign or `oauth` for Soprano. |
198+
| `EPP_PROVIDER_AUTH_MODE` | Live delivery | Must match the adapter: `apiKey` for Infobip, Sinch, or Telesign; `oauth` for Soprano. Bundled adapters do not all have guided setup profiles. |
199199
| `EPP_PROVIDER_TENANT_ID`, `EPP_PROVIDER_SCOPE` | Soprano OAuth | Provider tenant and selected API scope. |
200200
| `EPP_OUTBOUND_CLIENT_ID`, `EPP_OUTBOUND_MI_CLIENT_ID` | Soprano OAuth | Existing multitenant application and outbound user-assigned managed identity used for client-assertion exchange. |
201201
| `EPP_PROVIDER_TIMEOUT_MS` | Optional | Decimal milliseconds. Defaults to `1500`, capped at `2500`; not an end-to-end deadline. |
@@ -252,7 +252,14 @@ Incoming `tenantId`, `channel`, `mode` and `ttlSeconds` are request data and nev
252252
configured provider or authentication. `channel` selects the configured SMS or voice endpoint;
253253
there is no deployment-level channel restriction. The legacy `EPP_PROVIDER_CHANNEL` setting is ignored.
254254

255-
## Telesign EPP
255+
## Provider-specific integration details
256+
257+
Use the [credential and deployment-support table](docs/ONBOARDING.md#provider-credential-names)
258+
for your selected adapter. The [Soprano OAuth and voice contract](docs/CONTRACT.md#soprano-provider-jwt)
259+
and [Telesign EPP contract](docs/CONTRACT.md#telesign-epp-integration) describe different API requirements,
260+
not a provider ranking. The wire example below illustrates Telesign's format only.
261+
262+
### Telesign EPP
256263

257264
The `telesign` adapter sends its JSON contract to the complete SMS or voice URL selected by the
258265
request channel from the configured endpoints. It does not append or infer a route.

‎docs/CONTRACT.md‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -298,7 +298,7 @@ Set by provisioning. **Identical names across all languages.**
298298
| `EPP_PROVIDER_SMS_ENDPOINT` | required SMS endpoint for the selected provider/region; complete send URL for Telesign/Soprano, base URL for Infobip/Sinch |
299299
| `EPP_PROVIDER_VOICE_ENDPOINT` | required voice endpoint for the selected provider/region; complete send URL for Telesign/Soprano, base URL for Infobip/Sinch; may differ from SMS |
300300
| `EPP_PROVIDER_ENDPOINT_REGION` | selected `global` or `eu` route label; informational at runtime |
301-
| `EPP_PROVIDER_AUTH_MODE` | must match the selected provider (`apiKey` for Telesign, `oauth` for Soprano) |
301+
| `EPP_PROVIDER_AUTH_MODE` | must match the selected adapter (`apiKey` for Infobip, Sinch, or Telesign; `oauth` for Soprano); see [guided versus adapter-only support](ONBOARDING.md#provider-credential-names) |
302302
| `EPP_PROVIDER_TENANT_ID` | selected provider tenant; added to the Step 1 app's allowed-tenants preview and used as the OAuth authority for Soprano |
303303
| `EPP_PROVIDER_SCOPE` | Soprano OAuth scope |
304304
| `EPP_OUTBOUND_CLIENT_ID`, `EPP_OUTBOUND_MI_CLIENT_ID` | client application and user-assigned identity used for Soprano client-assertion exchange |

‎docs/ONBOARDING.md‎

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -122,15 +122,16 @@ certificate is separate again. Fix the failing path rather than replacing unrela
122122
## Complete provider authentication
123123

124124
<a id="provider-credential-names"></a>
125-
Guided setup currently supports **Telesign and Soprano only**. The other bundled adapters are
126-
developer integrations, not additional guided provider offers:
125+
Guided setup currently supports **Soprano and Telesign only**. The other bundled adapters are
126+
developer integrations, not additional guided provider offers. The table is alphabetical,
127+
not a recommendation order:
127128

128129
| Provider | Credential names / mode | Deployment support |
129130
|---|---|---|
130-
| `telesign` | `telesign-api-key` and `telesign-customer-id`; Basic authentication | Guided; complete the vault steps below. |
131-
| `soprano` | No API-key secrets; OAuth client assertion | Guided; complete the provider-admin handoff below. |
132131
| `infobip` | `infobip-api-key`; `Authorization: App ...` | Adapter only; no guided profile. Validate its account/options separately. |
133132
| `sinch` | `sinch-api-token`; static token | Adapter only; no guided profile. Validate its account/options separately. |
133+
| `soprano` | No API-key secrets; OAuth client assertion | Guided; complete the [provider-admin handoff](#soprano-provider-administrator-handoff). |
134+
| `telesign` | `telesign-api-key` and `telesign-customer-id`; Basic authentication | Guided; complete the [vault steps](#telesign-enter-and-verify-the-two-vault-secrets). |
134135

135136
### Where to enter API-key credentials in Key Vault
136137

‎dotnet/README.md‎

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,10 @@ used JavaScript; validate an equivalent .NET readiness implementation and deploy
2020
1. Follow [customer onboarding](../docs/ONBOARDING.md). Set `EPP_PROVIDER_NAME` to the selected
2121
adapter's `Name` (`<adapter-id>` is only a placeholder).
2222
2. Consult the selected adapter in [Src/Providers/](Src/Providers/) for required credentials and
23-
options. Store credentials in Key Vault under the provider's secret names, grant
24-
the Function's managed identity *Key Vault Secrets User*, and configure the matching endpoint/options.
23+
options. For API-key authentication, store credentials in Key Vault under the provider's secret names
24+
and grant the Function's managed identity *Key Vault Secrets User*. For OAuth, complete the
25+
[provider-administrator handoff](../docs/ONBOARDING.md#soprano-provider-administrator-handoff)
26+
instead of creating API-key secrets. Configure the matching endpoints/options for either mode.
2527
3. Base private local settings on [../docs/local.settings.sample.json](../docs/local.settings.sample.json),
2628
replacing placeholders and selecting `FUNCTIONS_WORKER_RUNTIME=dotnet-isolated`. Put settings
2729
at the app root beside [host.json](host.json). Configure decryption from the

‎javascript/README.md‎

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,11 @@ sample's release package. No Front Door deployment script is supplied.
2121
1. Follow [customer onboarding](../docs/ONBOARDING.md). Choose a bundled provider and set
2222
`EPP_PROVIDER_NAME` to its fixed id; `<provider-id>` is a placeholder, not a default.
2323
2. Consult the selected implementation in [src/functions/providers/](src/functions/providers/)
24-
for required credentials and options. Store credential values under the provider's Key Vault
25-
secret names, grant the Function's managed identity *Key Vault Secrets User*, and configure the
26-
matching endpoint and required options. This guide does not duplicate individual API contracts.
24+
for required credentials and options. For API-key authentication, store credential values under
25+
the provider's Key Vault secret names and grant the Function's managed identity *Key Vault Secrets User*.
26+
For OAuth, complete the [provider-administrator handoff](../docs/ONBOARDING.md#soprano-provider-administrator-handoff)
27+
instead of creating API-key secrets. Configure the matching endpoints and required options for either mode.
28+
This guide does not duplicate individual API contracts.
2729
3. Use [../docs/local.settings.sample.json](../docs/local.settings.sample.json) as a starting point,
2830
replacing placeholders with the selected provider's settings. Keep local settings private at
2931
the app root beside [host.json](host.json), with `FUNCTIONS_WORKER_RUNTIME=node`.

‎python/README.md‎

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,10 @@ used JavaScript; validate an equivalent Python readiness implementation and depl
2020
1. Follow [customer onboarding](../docs/ONBOARDING.md). Set `EPP_PROVIDER_NAME` to the selected
2121
provider id (`<adapter-id>` is only a placeholder).
2222
2. Consult the selected provider in [src/providers/](src/providers/) for required credentials and
23-
options. Store credentials in Key Vault under the provider-owned secret names, grant
24-
the Function's managed identity *Key Vault Secrets User*, and configure the matching endpoint/options.
23+
options. For API-key authentication, store credentials in Key Vault under the provider-owned secret names
24+
and grant the Function's managed identity *Key Vault Secrets User*. For OAuth, complete the
25+
[provider-administrator handoff](../docs/ONBOARDING.md#soprano-provider-administrator-handoff)
26+
instead of creating API-key secrets. Configure the matching endpoints/options for either mode.
2527
3. Base private local settings on [../docs/local.settings.sample.json](../docs/local.settings.sample.json),
2628
replacing placeholders and selecting `FUNCTIONS_WORKER_RUNTIME=python`. Put settings at the
2729
app root beside [host.json](host.json). Configure decryption from the

‎setup/docs/README.md‎

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -304,7 +304,8 @@ propagation errors are retried during capability checks/deployment. Permission f
304304
unsupported regions remain explicit errors. Registration is subscription-wide and isn't undone
305305
automatically if a later deployment step fails.
306306

307-
Supply known values to shorten the prompts:
307+
Supply known values to shorten the prompts. Replace `<provider-id>` with your selected guided
308+
provider's ID (`soprano` or `telesign`); neither is a default or recommendation:
308309

309310
```powershell
310311
.\Setup-Epp.ps1 `
@@ -314,7 +315,7 @@ Supply known values to shorten the prompts:
314315
-Location westus2 `
315316
-Language javascript `
316317
-ServicePlan FC1 `
317-
-Provider telesign `
318+
-Provider '<provider-id>' `
318319
-EndpointRegion global `
319320
-ResourcePrefix contoso
320321
```
@@ -366,8 +367,9 @@ alone never approves changes. There is no `-Stage`, `-Resume`, `-ConfigPath`, or
366367

367368
### Noninteractive example
368369

369-
This is a fully specified Telesign/Global JavaScript deployment example supporting both SMS and
370-
voice, not a credential script. Replace the three IDs and choose a permitted region/prefix/plan before running.
370+
This JavaScript deployment template supports both SMS and voice; it is not a credential script.
371+
Replace the three application/tenant/subscription IDs and `<provider-id>` (`soprano` or `telesign`),
372+
and choose the approved provider route, Azure region, prefix, and plan before running.
371373
The preliminary user sign-ins can require MFA and consent; `-NonInteractive` does not create a
372374
headless service-principal deployment path. Install the Graph modules/Bicep beforehand using
373375
interactive setup's prerequisite prompts or your approved installation process.
@@ -387,7 +389,7 @@ Connect-MgGraph -TenantId $tenantId -ContextScope Process `
387389
-SubscriptionId $subscriptionId `
388390
-ApplicationId $applicationId `
389391
-Location westus2 `
390-
-Provider telesign `
392+
-Provider '<provider-id>' `
391393
-EndpointRegion global `
392394
-Language javascript `
393395
-ServicePlan FC1 `
@@ -419,8 +421,8 @@ configuration metadata, not provider credentials or private-key bytes. Keep it a
419421
| `source`, `packageUrl`, `sourcePackageSha256`, `packageSha256`, `language`, `servicePlan` | Source/package provenance and runtime/plan. FC1 Python's built hash can be null; source and built hashes describe different artifacts. |
420422
| `policyChanged` | Expected `false`: deployment has not activated policy. |
421423

422-
For example, a healthy record can contain `"provider": "telesign"`,
423-
`"endpointRegion": "global"`, `"certificateRenewal": "manual"`, and `"policyChanged": false`.
424+
The `provider` field must match your selected provider. For example, a record for the Global route
425+
can contain `"endpointRegion": "global"`, `"certificateRenewal": "manual"`, and `"policyChanged": false`.
424426
Those fields do not prove credentials, delivery, or monitoring work. Follow
425427
[provider authentication](../../docs/ONBOARDING.md#complete-provider-authentication) next,
426428
**even if the script's completion text does not prompt for your provider**.

0 commit comments

Comments
 (0)