-
-
Notifications
You must be signed in to change notification settings - Fork 26
Description
A comparison of features in various OAuth authorization servers
GitHub | GitLab | BitBucket | Gitea | Azure DevOps | SourceHut | ||
---|---|---|---|---|---|---|---|
Records client type at registration | ❌ | ✓ | ✓ | ✓ | ✓ | ❌ | ❌ |
Supports PKCE | ❌ | ✓ | ❌ | ✓ | ✓ | ❌ | |
Enforces PKCE for public clients | ❌ | ❌ | ❌ | ✓ | ❌ | ❌ | |
User consent for every public client authorization | ❌ | ✓ | ❌ | ❌ | ✓ | ❌ | |
Access token expiry | ❌ | ✓ | ✓ | ✓ | ✓ | ✓ | |
Refresh tokens | ❌ | ✓ | ✓ | ✓ | ✓ | ✓ | |
Refresh tokens are single use | ❌ | ✓ | ❌ | ❌ | ❌ | ❌ | |
Public client authentication without secret | ❌ | ✓ | ❌ | ✓ | ❌ | ✓ | |
Device authorization grant | ✓ | ❌ | ❌ | ❌ | ✓ | ❌ | |
Basic auth username | Any | oauth2 | x-token-auth | Any | Any | ||
Bearer auth | ❌ | ❌ | ✓ | ✓ | ✓ |
Details
- Record client type at registration:
The client type designation is based on the authorization server's definition of secure authentication and its acceptable exposure levels of client credentials. The authorization server SHOULD NOT make assumptions about the client type.
- Supports PKCE
Authorization servers MUST support PKCE
- Enforces PKCE for public clients
[Authorization server] MUST reject requests without a code_challenge from public clients
- User consent for every public client authorization
the authorization server SHOULD NOT process authorization requests automatically without user consent or interaction, except when the identity of the client can be assured. This includes the case where the user has previously approved an authorization request for a given client id
- Access token expiry
Authorization servers SHOULD issue short-lived bearer tokens, particularly when issuing tokens to clients that run within a web browser or other environments where information leakage may occur. Using short-lived bearer tokens can reduce the impact of them being leaked.
- Refresh tokens
Refresh tokens also add to the security of OAuth, since they allow the authorization server to issue access tokens with a short lifetime and reduced scope, thus reducing the potential impact of access token leakage.
- Refresh tokens are single use:
Refresh tokens for public clients MUST be sender-constrained or use refresh token rotation
- Public client authentication without secret
it is NOT RECOMMENDED for authorization servers to require client authentication of public native apps clients using a shared secret