Skip to content

Commit 0c36695

Browse files
committed
Document licensing details for Business and Enterprise Edition-specific features across IdentityServer docs.
1 parent 52eb8e2 commit 0c36695

12 files changed

Lines changed: 129 additions & 96 deletions

File tree

src/content/docs/identityserver/configuration/dcr.mdx

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -76,9 +76,8 @@ create a new ASP.NET Core Web application which will host the Configuration API.
7676
```
7777

7878
:::note
79-
The Configuration API feature is included in the Duende IdentityServer Business
80-
edition license and higher. Use the same license key for IdentityServer and the
81-
Configuration API.
79+
This feature is part of the [Duende IdentityServer Business and Enterprise Edition](https://duendesoftware.com/products/identityserver).
80+
Configure the same license key for IdentityServer and the Configuration API.
8281
:::
8382

8483
4. **Add and configure the client configuration store**

src/content/docs/identityserver/configuration/index.md

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,11 @@ The Configuration API is a collection of endpoints that allow for management and
1818
implementation. The Configuration API can be hosted either separately or within the IdentityServer implementation, and is
1919
distributed through the separate [Duende.IdentityServer.Configuration NuGet package](https://www.nuget.org/packages/Duende.IdentityServer.Configuration).
2020

21-
Currently, the Configuration API supports the [Dynamic Client Registration](/identityserver/configuration/dcr.mdx) protocol.
21+
Currently, the Configuration API supports the [Dynamic Client Registration](/identityserver/configuration/dcr.mdx) protocol.
2222

23-
The Configuration API is part of the [Duende IdentityServer](https://duendesoftware.com/products/identityserver) Business Edition or higher. The same [license](https://duendesoftware.com/products/identityserver#pricing)
24-
and [special offers](https://duendesoftware.com/specialoffers) apply.
23+
:::note
24+
This feature is part of the [Duende IdentityServer Business and Enterprise Edition](https://duendesoftware.com/products/identityserver).
25+
:::
2526

2627
The Configuration API source code is available [on GitHub](https://github.com/DuendeSoftware/products/tree/main/identity-server/src/Configuration).
2728

src/content/docs/identityserver/fundamentals/key-management.md

Lines changed: 20 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -39,8 +39,9 @@ material, including
3939
* announcement of upcoming new keys
4040
* maintenance of retired keys
4141

42-
Automatic Key Management is included in [IdentityServer](https://duendesoftware.com/products/identityserver) Business
43-
Edition or higher.
42+
:::note
43+
This feature is part of the [Duende IdentityServer Business and Enterprise Edition](https://duendesoftware.com/products/identityserver).
44+
:::
4445

4546
### Configuration
4647

@@ -60,7 +61,7 @@ has passed, keys are removed from discovery, and optionally deleted.
6061

6162
The default is to rotate keys every 90 days, announce new keys with 14 days of
6263
propagation time, retain old keys for a duration of 14 days, and to delete keys
63-
when they are retired.
64+
when they are retired.
6465

6566
```mermaid
6667
---
@@ -73,12 +74,12 @@ config:
7374
gantt
7475
title 90 Day Key Rotation Schedule per Signing Algorithm
7576
todayMarker off
76-
77+
7778
section RS256
7879
Signing :active, rsa_s, 2025-01-01, 76d
7980
Retire :rsa_r, after rsa_s, 14d
8081
Delete :crit, rsa_d, after rsa_r, 1d
81-
82+
8283
Announce :rsa_na, 2025-03-03, 14d
8384
Signing :active, rsa_ns, after rsa_na, 62d
8485
Retire :rsa_nr, after rsa_ns, 14d
@@ -100,13 +101,13 @@ All of these options are configurable in the `KeyManagement` options. For exampl
100101
```cs
101102
// Program.cs
102103
var idsvrBuilder = builder.Services.AddIdentityServer(options =>
103-
{
104+
{
104105
// new key every 30 days
105106
options.KeyManagement.RotationInterval = TimeSpan.FromDays(30);
106-
107+
107108
// announce new key 2 days in advance in discovery
108109
options.KeyManagement.PropagationTime = TimeSpan.FromDays(2);
109-
110+
110111
// keep old key for 7 days in discovery for validation of tokens
111112
options.KeyManagement.RetentionDuration = TimeSpan.FromDays(7);
112113

@@ -139,7 +140,7 @@ access to the `KeyPath`.
139140
```cs
140141
// Program.cs
141142
var idsvrBuilder = builder.Services.AddIdentityServer(options =>
142-
{
143+
{
143144
// set path to store keys
144145
options.KeyManagement.KeyPath = "/home/shared/keys";
145146
});
@@ -169,7 +170,7 @@ an X.509 certificate. Automatic key management will create and rotate keys for
169170
each signing algorithm you specify.
170171

171172
:::note
172-
*X.509 certificates* have an expiration date, but IdentityServer does
173+
_X.509 certificates_ have an expiration date, but IdentityServer does
173174
not use this data to validate the certificate and throw an exception. If a certificate has expired then you
174175
must decide whether to continue using it or replace it with a new certificate.
175176
:::
@@ -179,10 +180,10 @@ options.KeyManagement.SigningAlgorithms = new[]
179180
{
180181
// RS256 for older clients (with additional X.509 wrapping)
181182
new SigningAlgorithmOptions(SecurityAlgorithms.RsaSha256) { UseX509Certificate = true },
182-
183+
183184
// PS256
184185
new SigningAlgorithmOptions(SecurityAlgorithms.RsaSsaPssSha256),
185-
186+
186187
// ES256
187188
new SigningAlgorithmOptions(SecurityAlgorithms.EcdsaSha256)
188189
};
@@ -200,7 +201,7 @@ resource and client basis.
200201
Instead of using [Automatic Key Management](#automatic-key-management), IdentityServer's signing keys can be set
201202
manually. Automatic Key Management is generally recommended, but if you want to
202203
explicitly control your keys statically, or you have a license that does not
203-
include the feature (e.g. the Starter Edition), you will need to manually manage
204+
include the feature, you will need to manually manage
204205
your keys. With static configuration you are responsible for secure storage,
205206
loading and rotation of keys.
206207

@@ -378,7 +379,7 @@ key as a validation key.
378379
```cs
379380
// Program.cs
380381
var idsvrBuilder = builder.Services.AddIdentityServer(options =>
381-
{
382+
{
382383
options.KeyManagement.Enabled = false;
383384
});
384385

@@ -406,7 +407,7 @@ the signing credential and validation key.
406407
```cs
407408
// Program.cs
408409
var idsvrBuilder = builder.Services.AddIdentityServer(options =>
409-
{
410+
{
410411
options.KeyManagement.Enabled = false;
411412
});
412413

@@ -428,7 +429,7 @@ old key, it is safe to completely remove the old key.
428429

429430
```cs
430431
var idsvrBuilder = builder.Services.AddIdentityServer(options =>
431-
{
432+
{
432433
options.KeyManagement.Enabled = false;
433434
});
434435

@@ -473,7 +474,7 @@ key. IdentityServer will continue to sign keys with your old static key.
473474

474475
```cs
475476
var idsvrBuilder = builder.Services.AddIdentityServer(options =>
476-
{
477+
{
477478
options.KeyManagement.Enabled = true;
478479
});
479480

@@ -491,7 +492,7 @@ keep the old key for validation purposes.
491492

492493
```cs
493494
var idsvrBuilder = builder.Services.AddIdentityServer(options =>
494-
{
495+
{
495496
options.KeyManagement.Enabled = true;
496497
});
497498

@@ -508,7 +509,7 @@ Now the static key configuration can be removed entirely.
508509

509510
```cs
510511
var idsvrBuilder = builder.Services.AddIdentityServer(options =>
511-
{
512+
{
512513
options.KeyManagement.Enabled = true;
513514
});
514515
```

src/content/docs/identityserver/fundamentals/resources/isolation.md

Lines changed: 16 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,10 @@ redirect_from:
1111
---
1212

1313
:::note
14-
This is an Enterprise Edition feature.
14+
This feature is part of the [Duende IdentityServer Enterprise Edition](https://duendesoftware.com/products/identityserver).
1515
:::
1616

17-
OAuth itself only knows about scopes - the (API) resource concept does not exist from a pure protocol point of view.
17+
OAuth itself only knows about scopes - the (API) resource concept does not exist from a pure protocol point of view.
1818
This means that all the requested scope and audience combination get merged into a single access token.
1919
This has a couple of downsides:
2020

@@ -25,8 +25,8 @@ This has a couple of downsides:
2525
* resource specific processing like signing or encryption algorithms conflict
2626
* without sender-constraints, a resource could potentially re-use (or abuse) a token to call another contained resource directly
2727

28-
To solve this problem [RFC 8707](https://tools.ietf.org/html/rfc8707) adds another request parameter for the authorize and token endpoint called `resource`.
29-
This allows requesting a token for a specific resource (in other words - making sure the audience claim has a single
28+
To solve this problem [RFC 8707](https://tools.ietf.org/html/rfc8707) adds another request parameter for the authorize and token endpoint called `resource`.
29+
This allows requesting a token for a specific resource (in other words - making sure the audience claim has a single
3030
value only, and all scopes belong to that single resource).
3131

3232
## Using The Resource Parameter
@@ -52,7 +52,8 @@ If the client would request a token for the `read` scope, the resulting access t
5252
the invoice and the products API and thus be accepted at both APIs.
5353

5454
### Machine to Machine Scenarios
55-
If the client in addition passes the `resource` parameter specifying the name of the resource where it wants to use
55+
56+
If the client in addition passes the `resource` parameter specifying the name of the resource where it wants to use
5657
the access token, the token engine can `down-scope` the resulting access token to the single resource, e.g.:
5758

5859
```text
@@ -70,13 +71,14 @@ Thus resulting in an access token like this (some details omitted):
7071

7172
```json
7273
{
73-
"aud": [ "urn:invoice" ],
74-
"scope": "read",
75-
"client_id": "client"
74+
"aud": ["urn:invoice"],
75+
"scope": "read",
76+
"client_id": "client"
7677
}
7778
```
7879

7980
### Interactive Applications
81+
8082
The authorize endpoint supports the `resource` parameter as well, e.g.:
8183

8284
```text
@@ -98,6 +100,7 @@ resource=urn:invoices
98100
```
99101

100102
### Requesting Access To Multiple Resources
103+
101104
It is also possible to request access to multiple resources. This will result in multiple access tokens - one for each request resource.
102105

103106
```text
@@ -135,7 +138,8 @@ resource=urn:products
135138
The end-result will be that the client has two access tokens - one for each resource and can manage their lifetime via the refresh token.
136139

137140
## Enforcing Resource Isolation
138-
All examples so far used the `resource` parameter optionally. If you have API resources, where you want to make sure
141+
142+
All examples so far used the `resource` parameter optionally. If you have API resources, where you want to make sure
139143
they are not sharing access tokens with other resources, you can enforce the resource indicator, e.g.:
140144

141145
```csharp title="ApiResources.cs" {6,12}
@@ -156,11 +160,11 @@ var resources = new[]
156160
```
157161

158162
The `RequireResourceIndicator` property **does not** mean that clients are forced to send the `resource` parameter when
159-
they request scopes associated with the API resource. You can still request those scopes without setting the `resource`
160-
parameter (or including the resource), and IdentityServer will issue a token as long as the client is allowed to request
163+
they request scopes associated with the API resource. You can still request those scopes without setting the `resource`
164+
parameter (or including the resource), and IdentityServer will issue a token as long as the client is allowed to request
161165
the scopes.
162166

163-
Instead, `RequireResourceIndicator` controls **when** the resource's URI is included in the **audience claim** (`aud`)
167+
Instead, `RequireResourceIndicator` controls **when** the resource's URI is included in the **audience claim** (`aud`)
164168
of the issued access token.
165169

166170
* When `RequireResourceIndicator` is `false` (the default):
@@ -169,4 +173,3 @@ of the issued access token.
169173
* When `RequireResourceIndicator` is `true`:
170174
The API's resource URI will **only** be included in the audience **if the client explicitly includes the resource URI**
171175
via the `resource` parameter when requesting the token.
172-

src/content/docs/identityserver/overview/specs.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,10 @@ redirect_from:
1313

1414
Duende IdentityServer implements the following specifications:
1515

16+
:::note
17+
Some specifications are only available in the [Duende IdentityServer Business or Enterprise Edition](https://duendesoftware.com/products/identityserver).
18+
:::
19+
1620
## OpenID Connect
1721

1822
* OpenID Connect Core 1.0 ([spec](https://openid.net/specs/openid-connect-core-1_0.html))

src/content/docs/identityserver/tokens/par.md

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -34,8 +34,11 @@ care, and in other industries with high security requirements.
3434

3535
## Licensing
3636

37-
Duende.IdentityServer includes support for PAR in the Business Edition or higher license. In the starter edition, PAR
38-
requests will not be processed and instead log errors. If you have a starter edition license, you should disable the
37+
:::note
38+
This feature is part of the [Duende IdentityServer Business and Enterprise Edition](https://duendesoftware.com/products/identityserver).
39+
:::
40+
41+
In the Starter edition, PAR requests will not be processed and instead log errors. If you have a starter edition license, you should disable the
3942
`EnablePushedAuthorizationEndpoint` flag so that discovery indicates that your IdentityServer does not support PAR:
4043

4144
```cs
@@ -72,12 +75,13 @@ builder.Services
7275
.AddOpenIdConnect(OpenIdConnectDefaults.AuthenticationScheme, oidcOptions =>
7376
{
7477
// Your authority, client ID, ... configuration goes here.
75-
76-
// By default, PushedAuthorizationBehavior is set to PushedAuthorizationBehavior.UseIfAvailable.
78+
79+
// By default, PushedAuthorizationBehavior is set to PushedAuthorizationBehavior.UseIfAvailable.
7780
// You can also require using PAR:
7881
oidcOptions.PushedAuthorizationBehavior = PushedAuthorizationBehavior.Require;
7982
});
8083
```
84+
8185
.NET 8 does not have built-in support for PAR. If you're using .NET 8, we have a sample of how to implement this flow
8286
available [here](/identityserver/samples/basics.mdx#mvc-client-with-pushed-authorization-requests).
8387

0 commit comments

Comments
 (0)