Interface OAuth2AuthorizationService
- All Known Implementing Classes:
InMemoryOAuth2AuthorizationService, JdbcOAuth2AuthorizationService
public interface OAuth2AuthorizationService
Where an authorization server keeps the grants it has made and the secrets it issued under them.
A secret -- an authorization code, a refresh token, a device code, a user
code -- is never stored: its SHA-256 is, see
OAuth2Parameters.sha256(String). And a
secret that works once is used up by consumeToken(String, String, long), which an
implementation must make one conditional statement on one row, never a read
followed by a write: several processes may share the store, and of two that
present the same code at the same moment exactly one may be told yes.
This is not the interface of Spring Authorization Server's service of the
same name, whose save and findByToken leave that atomicity to the
caller.
-
Nested Class Summary
Nested ClassesModifier and TypeInterfaceDescriptionstatic final classOne stored secret, asfindToken(String, String)reports it. -
Field Summary
Fields -
Method Summary
Modifier and TypeMethodDescriptionvoidRecords a secret issued under a grant.booleanconsumeToken(String kind, String tokenHash, long now) Uses a secret up, if it is there, unused and has not expired atnow, and recordsnowas when.booleanAnswers a device grant that isOAuth2Authorization.PENDING: makes itOAuth2Authorization.ACTIVEforprincipalName, orOAuth2Authorization.DENIED.default booleanextendToken(String kind, String tokenHash, long now, long expiresAt) Extends an unused, unexpired token to at leastexpiresAt, atomically.The grant with this id, or null: one that was removed is revoked.What is stored for a secret, whatever its state; null when nothing is.default booleanissueTokens(String authorizationId, long now, long expiresAt, String refreshTokenHash, boolean reuse) Issues tokens only while an active, unexpired grant still exists.default booleanClaims a polling interval on an unused, unexpired token.intpurgeExpired(long now, int limit) Forgets up tolimitgrants and secrets that expired beforenow.voidRemoves the grant and every secret issued under it.voidsave(OAuth2Authorization authorization) Storesauthorization, in place of the one with its id if there is one.voidtouchToken(String kind, String tokenHash, long now) Records that a secret was presented atnow, without checking its previous timestamp.
-
Field Details
-
CODE
-
REFRESH_TOKEN
-
DEVICE_CODE
-
USER_CODE
-
-
Method Details
-
save
Storesauthorization, in place of the one with its id if there is one. -
findById
The grant with this id, or null: one that was removed is revoked. -
remove
Removes the grant and every secret issued under it. -
addToken
Records a secret issued under a grant.- Parameters:
kind-CODE,REFRESH_TOKEN,DEVICE_CODEorUSER_CODEtokenHash- the SHA-256 of the secretexpiresAt- epoch milliseconds
-
issueTokens
default boolean issueTokens(String authorizationId, long now, long expiresAt, String refreshTokenHash, boolean reuse) Issues tokens only while an active, unexpired grant still exists. Extending the grant and adding or extending its refresh token must be one atomic operation with respect toremove(String), including across server processes. A removed grant must never be recreated. Custom stores must implement this operation before issuing user tokens; the default fails closed.- Parameters:
refreshTokenHash- null when no refresh token is issuedreuse- whether the hash names an existing unused, unexpired refresh token- Returns:
- false when the grant or reused refresh token is no longer valid
-
findToken
What is stored for a secret, whatever its state; null when nothing is. -
consumeToken
-
extendToken
-
touchToken
Records that a secret was presented atnow, without checking its previous timestamp. UsepollToken(String, String, long, long)to enforce a polling interval. -
pollToken
Claims a polling interval on an unused, unexpired token. Checking the previous poll and recordingnowmust be one atomic operation, including across processes sharing a database. Rejected polls do not claim an interval. Custom stores must implement this before enabling the device grant.- Parameters:
intervalMillis- the minimum time between accepted polls, greater than zero- Returns:
- whether this call claimed the interval
-
decide
Answers a device grant that isOAuth2Authorization.PENDING: makes itOAuth2Authorization.ACTIVEforprincipalName, orOAuth2Authorization.DENIED.- Parameters:
attributes- what to remember of the user who approved, merged into the grant's own- Returns:
- whether THIS call answered it
-
purgeExpired
int purgeExpired(long now, int limit) Forgets up tolimitgrants and secrets that expired beforenow.- Returns:
- how many were forgotten
-