{{define "content"}}
{{.Title}}
{{.Kind}}
Back
{{if .Error}}

{{.Error}}

{{end}}
{{with .Client}}
Client
ID
{{.ID}}
Name
{{if .Name}}{{.Name}}{{else}}not set{{end}}
Type
{{if .Public}}public — no secret{{else}}confidential{{end}}
{{if .Secret}}
Secret
{{.Secret}}
{{end}}
Logo URL
{{if .LogoURL}}{{.LogoURL}}{{else}}not set{{end}}
Redirect URIs
{{range .RedirectURIs}}{{.}}
{{else}}none{{end}}
Trusted peers
{{range .TrustedPeers}}{{.}}
{{else}}none{{end}}
Allowed connectors
{{range .AllowedConnectors}}{{.}}
{{else}}all{{end}}
SSO shared with
{{range .SSOSharedWith}}{{.}}
{{else}}the sessions default{{end}}
Post-logout redirect URIs
{{range .PostLogoutRedirectURIs}}{{.}}
{{else}}none — logout cannot redirect back{{end}}
Back-channel logout URI
{{if .BackchannelLogoutURI}}{{.BackchannelLogoutURI}}{{else}}not set — this client is not notified when a session ends{{end}}
Refresh token lifetime
{{if eq .RefreshTokenLifetime "session"}}session — refreshing stops when the browser session ends{{else}}standalone — refresh tokens outlive the browser session{{end}}
Edit

The API's UpdateClient does not carry a secret or the public flag, so neither can be changed here: dex expects a client that needs a new secret to be deleted and created again.

{{end}} {{with .Connector}}
Connector
ID
{{.ID}}
Type
{{.Type}}
Name
{{.Name}}
Grant types
{{range .GrantTypes}}{{.}}
{{else}}unrestricted{{end}}
Configuration
{{if .Config}}
{{.Config}}
{{else}}

No configuration stored.

{{end}}
UpdateConnector
Left empty, the stored configuration is kept.
{{range $g := $.ConnectorGrantTypes}}
{{end}}
Cancel
{{end}} {{with .Identity}}
Identity
User ID
{{.UserID}}
Connector
{{.ConnectorID}}
Email
{{.Email}}{{if .EmailVerified}} (verified){{else}} (not verified){{end}}
Username
{{if .Username}}{{.Username}}{{else}}not set{{end}}
Groups
{{range .Groups}}{{.}}
{{else}}none{{end}}
{{if .Created}}
First seen
{{.Created}}
{{end}} {{if .LastLogin}}
Last sign-in
{{.LastLogin}}
{{end}}

None of this is editable: it is what the connector said about the user at their last sign-in, and dex re-records it at the next one. For the local connector, the entry behind it is on the Passwords tab.

Consents
{{if .Consents}} {{range .Consents}} {{end}}
ClientScopes
{{.ClientID}} {{range .Scopes}}{{.}} {{end}}

Revoking one puts the consent screen back in front of the user for that client.

{{else}}

Nothing approved yet, or the client skips the consent screen.

{{end}}
Multi-factor
{{if .MFADevices}} {{range .MFADevices}}
{{.AuthenticatorID}}
Secret
{{if .HasSecret}}enrolled{{else}}none{{end}}
Keys
{{len .Credentials}}
{{if .Credentials}} {{range .Credentials}} {{end}}
KeyTransportUsesRegistered
{{if .DisplayName}}{{.DisplayName}}{{else}}unnamed{{end}}
{{.ID}}
{{range .Transport}}{{.}} {{else}}unknown{{end}} {{.SignCount}} {{.Created}}
{{end}} {{if .HasSecret}}
{{end}}
{{end}}

Clears every factor above at once; the user enrols again on their next sign-in.

{{else}}

Nothing enrolled.

{{end}}
Sessions

Sessions and refresh tokens for this user are on the Sessions tab.

Open them
{{end}} {{end}}