Skip to content

Commit a175a91

Browse files
committed
Align IdentityServer with products commit 5777b1ece2af0aa7f2270e08050ffa3a24bbd6da (#1085)
1 parent 82183d5 commit a175a91

3 files changed

Lines changed: 33 additions & 7 deletions

File tree

astro/src/content/docs/identityserver/reference/v8/services/device-flow-interaction-service.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ All async methods accept a `CancellationToken ct` parameter.
2828

2929
* **`HandleRequestAsync(string userCode, ConsentResponse consent, CancellationToken ct)`**
3030

31-
Completes device authorization for the given `userCode`.
31+
Completes device authorization for the given `userCode`. Note that `ConsentResponse.RememberConsent` is always treated as `false` in device flow. Consent is never persisted across device flow sessions. This follows [RFC 8628](https://www.rfc-editor.org/rfc/rfc8628) security guidance, since the device initiating the flow is different from the device where the user authenticates.
3232

3333
## DeviceFlowAuthorizationRequest
3434

astro/src/content/docs/identityserver/ui/login/dynamicproviders.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -123,15 +123,15 @@ containing the dynamic providers.
123123
public interface IIdentityProviderStore
124124
{
125125
/// <summary>
126-
/// Gets all identity providers name.
126+
/// Gets the display names and scheme names of all registered identity providers.
127127
/// </summary>
128-
Task<IEnumerable<IdentityProviderName>> GetAllSchemeNamesAsync();
128+
Task<IReadOnlyCollection<IdentityProviderName>> GetAllSchemeNamesAsync(CancellationToken ct);
129129

130130
// other APIs omitted
131131
}
132132
```
133133

134-
The `GetAllSchemeNamesAsync()` API returns a list of `IdentityProviderName` objects, which contain the scheme name and
134+
The `GetAllSchemeNamesAsync` API returns a read-only collection of `IdentityProviderName` objects, which contain the scheme name and
135135
display name of the provider and can be used on the login page, or in other places where you need this information.
136136

137137
In the [IdentityServer Quickstart UI](https://github.com/DuendeSoftware/products/tree/main/identity-server/templates/src/UI/Pages/Account/Login/Index.cshtml.cs#l193-l210),
@@ -149,7 +149,7 @@ var providers = schemes
149149
AuthenticationScheme = x.Name
150150
}).ToList();
151151

152-
var dynamicSchemes = (await _identityProviderStore.GetAllSchemeNamesAsync())
152+
var dynamicSchemes = (await _identityProviderStore.GetAllSchemeNamesAsync(HttpContext.RequestAborted))
153153
.Where(x => x.Enabled)
154154
.Select(x => new ExternalProvider
155155
{

astro/src/content/docs/identityserver/upgrades/v7_4-to-v8_0.md

Lines changed: 28 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -192,7 +192,7 @@ builder.Services.AddIdentityServer()
192192
`System.TimeProvider` (available since .NET 8).
193193

194194
```diff lang="csharp" title="MyService.cs"
195-
- // Before (v7.x)0
195+
- // Before (v7.x)
196196
- public class MyService
197197
- {
198198
- public MyService(IClock clock) { }
@@ -438,7 +438,33 @@ A new `Duende.IdentityServer.ConformanceReport` package generates an HTML report
438438
IdentityServer deployment against OAuth 2.1 and FAPI 2.0 specifications. See the
439439
[Conformance Report documentation](/identityserver/diagnostics/conformance-report/) for details.
440440

441-
## Step 6: Done!
441+
### Device Flow Consent Is No Longer Remembered
442+
443+
The device flow consent UI no longer offers a "Remember My Decision" option. `ConsentResponse.RememberConsent` is now always set to `false` during device flow authorization.
444+
445+
This change follows [RFC 8628](https://www.rfc-editor.org/rfc/rfc8628) security guidance: because the device initiating the flow is different from the device where the user authenticates, persisting consent creates a cross-device phishing risk.
446+
447+
**If you use the Duende UI templates for device flow**, this change is already applied. If you maintain a custom device flow consent page, remove the "remember consent" checkbox and ensure `ConsentResponse.RememberConsent` is set to `false` when calling `IDeviceFlowInteractionService.HandleRequestAsync`.
448+
449+
## Step 6: Behavioral Changes
450+
451+
### Secret Validator Log Level Changed from Error to Debug
452+
453+
In `ApiSecretValidator` and `ClientSecretValidator`, "not found" log entries (e.g., "No API secret found", "No client with id '...' found") have been downgraded from `Error` to `Debug`. These outcomes are expected during the introspection endpoint's fallback authentication pattern and are not genuine errors.
454+
455+
To compensate, `Warning`-level log entries have been added at the token endpoint, token revocation endpoint, and backchannel authentication endpoint when client validation fails, so genuine authentication failures remain visible to operators.
456+
457+
**Impact:** If your monitoring or alerting watches for `Error`-level log entries from `ApiSecretValidator` or `ClientSecretValidator` to detect authentication failures, those alerts will no longer trigger. Update your alerting to watch for `Warning`-level entries at the endpoint level instead.
458+
459+
### Audience Validation Now Accepts Single-Element Arrays
460+
461+
When `StrictClientAssertionAudienceValidation` is enabled (or when a client assertion uses the `client-authentication+jwt` token type), the `aud` claim in `private_key_jwt` client assertions may now be either a plain string or a single-element JSON array containing the issuer identifier. Previously, only a plain string was accepted.
462+
463+
This aligns with [draft-ietf-oauth-rfc7523bis](https://datatracker.ietf.org/doc/draft-ietf-oauth-rfc7523bis/), which permits the issuer identifier as the sole audience value in either form. Multi-element arrays are still rejected.
464+
465+
**Impact:** Clients that send the `aud` claim as a single-element array (e.g., `"aud": ["https://your-issuer"]`) will now pass strict audience validation where they previously would have failed. No action is required unless you relied on the stricter behavior.
466+
467+
## Step 7: Done!
442468

443469
That's it. Of course, at this point you can and should test that your IdentityServer is updated and
444470
working properly.

0 commit comments

Comments
 (0)