· 28. Januar 2026
OpenID discovery, scopes and longer sessions
Identity became something an outside application can integrate against properly: OpenID discovery and JWKS endpoints, an authorization code flow that follows the spec, requested scopes, and a record of what happened on an account.
Added
- OpenID configuration and JWKS endpoints. An application can discover Identity's endpoints and fetch its public signing keys instead of having them configured by hand. Both answer cross-origin requests, so browser-based clients can read them directly.
- Signing algorithm per application. Tokens are signed with a private key and the algorithm recorded on the application, rather than one fixed choice for everyone.
- Scopes in the authorization request. Application verification accepts a scope parameter, so an application states what access it is asking for.
- Account history. Actions on applications, sessions and authorization requests are written to a history, so an account can show what happened and when.
- Push tokens on sign-in. Identifying a user now registers the device's push token alongside the issued token.
- Profile pictures. An account can carry a profile image.
Improved
- The authorization code flow follows the spec. The redirect back to the application carries both the authorization code and the state parameter it sent. The token exchange accepts form-encoded requests and answers clearly when a grant type is not supported.
- The user endpoint says more. It returns the user directly instead of wrapping it, includes the credentials assigned to that user, and validates the token more strictly before answering.
- Sign-ins last 90 days. Tokens stay valid for 90 days before a new sign-in is needed.
- Authorization ends with a confirmation. A completed authorization closes on a success animation.
Fixed
- Expired authorization chips were still accepted when a session was accepted. Expiry is now checked, and a request that is not allowed gets a clear answer instead of an ambiguous one.
- The app could stay stuck on a loading state when a request failed. It now stops and reports the failure.