Table of Contents

Class TokenIssuedSuccessEvent

Namespace
Fdyay.IdentityServer.Events
Assembly
Fdyay.IdentityServer.Core.dll

Tokens were issued, from the token endpoint or, for a code, the authorize endpoint.

public class TokenIssuedSuccessEvent : Event
Inheritance
TokenIssuedSuccessEvent
Inherited Members

Remarks

The tokens themselves are deliberately absent. An event carrying an access token is a credential in whatever the host forwards events to, and every question this event exists to answer — who got what, for which client, under which grant — is answerable without it. Tokens is Duende's member with each token's type and its TokenFingerprint in place of its value (the decision of 2026-10-13).

Constructors

TokenIssuedSuccessEvent(string, string?, string, IEnumerable<string>)

Tokens issued to a client. Endpoint starts as Token.

public TokenIssuedSuccessEvent(string clientId, string? subjectId, string grantType, IEnumerable<string> scopes)

Parameters

clientId string

The client the tokens were issued to.

subjectId string

The user they were issued for, or null where there is none.

grantType string

The grant they were issued under.

scopes IEnumerable<string>

The scopes they carry.

Properties

ClientId

The client the tokens were issued to.

public string ClientId { get; }

Property Value

string

ClientName

The client's display name, where it has one. Duende's.

public string? ClientName { get; set; }

Property Value

string

Endpoint

The endpoint the tokens came from: Token or Authorize, as Duende names them, or BackchannelAuthentication for a CIBA push delivery, which no endpoint answers.

public string? Endpoint { get; set; }

Property Value

string

GrantType

The grant the tokens were issued under, such as authorization_code or refresh_token.

public string GrantType { get; }

Property Value

string

RedirectUri

The redirect URI the authorize endpoint answered; null from every other endpoint. Duende's.

public string? RedirectUri { get; set; }

Property Value

string

Scopes

The scopes the tokens carry.

public IReadOnlyCollection<string> Scopes { get; }

Property Value

IReadOnlyCollection<string>

SubjectId

Null for client_credentials, where there is no user.

public string? SubjectId { get; }

Property Value

string

Tokens

Each token issued, as its type and fingerprint — never its value. Duende's member and shape.

public IEnumerable<TokenIssuedSuccessEvent.Token> Tokens { get; set; }

Property Value

IEnumerable<TokenIssuedSuccessEvent.Token>

Remarks

Duende 8.0.1 fills it, from the token endpoint, with id_token, refresh_token and access_token in that order, whichever were issued, and with their values; from the authorize endpoint, with the code. Here the order and types are Duende's and each TokenValue is a TokenFingerprint: a token in an event sink is a credential in a log, and there is no option that puts one there.