@@ -123,7 +123,7 @@ and is executed as follows:
123123By default, JWT access-token generation or validation triggers interactions with the database. JWT access-token persistence differs from opaque-token persistence, where an existing active token is retrieved during a token request. The issuer always issues a new JWT access token. The following sections explain how to optimize the default JWT persistence in Identity Server using ** non-persistent access token** .
124124
125125!!! note
126- This feature is available for ** WSO2 Identity Server 5.11.0** as of ** update level 410** .
126+ This feature is available for ** WSO2 Identity Server 5.11.0** as of ** update level 410** and currently supports ** H2 ** and ** MySQL ** databases .
127127
128128### Why optimize JWT Acces token persistence?
129129
@@ -199,57 +199,6 @@ In large-scale WSO2 Identity Server deployments, especially with millions of use
199199
2002001 . Add following tables to the ` IDENTITY_DB ` .
201201
202- ??? Example "DB2"
203-
204- ```sql
205- CREATE TABLE IDN_OAUTH2_REFRESH_TOKEN (
206- REFRESH_TOKEN_ID VARCHAR (255),
207- REFRESH_TOKEN VARCHAR(2048),
208- CONSUMER_KEY_ID INTEGER,
209- AUTHZ_USER VARCHAR (100),
210- TENANT_ID INTEGER,
211- USER_DOMAIN VARCHAR(50),
212- GRANT_TYPE VARCHAR (50),
213- REFRESH_TOKEN_TIME_CREATED TIMESTAMP,
214- REFRESH_TOKEN_VALIDITY_PERIOD BIGINT,
215- TOKEN_SCOPE_HASH VARCHAR(32),
216- TOKEN_STATE VARCHAR(25) DEFAULT 'ACTIVE',
217- SUBJECT_IDENTIFIER VARCHAR(255),
218- REFRESH_TOKEN_HASH VARCHAR(512),
219- IDP_ID INTEGER DEFAULT -1 NOT NULL,
220- PRIMARY KEY (REFRESH_TOKEN_ID),
221- FOREIGN KEY (CONSUMER_KEY_ID) REFERENCES IDN_OAUTH_CONSUMER_APPS(ID) ON DELETE CASCADE) INDEX IN TS32K
222- /
223-
224- CREATE TABLE IDN_OAUTH2_REFRESH_TOKEN_SCOPE (
225- REFRESH_TOKEN_ID VARCHAR (255) NOT NULL,
226- TOKEN_SCOPE VARCHAR (255) NOT NULL,
227- TENANT_ID INTEGER DEFAULT -1,
228- PRIMARY KEY (REFRESH_TOKEN_ID, TOKEN_SCOPE),
229- FOREIGN KEY (REFRESH_TOKEN_ID) REFERENCES IDN_OAUTH2_REFRESH_TOKEN(REFRESH_TOKEN_ID) ON DELETE CASCADE)
230- /
231-
232- CREATE TABLE IDN_OAUTH2_REVOKED_TOKENS (
233- UUID VARCHAR(255) NOT NULL,
234- TOKEN_IDENTIFIER VARCHAR(2048) NOT NULL,
235- CONSUMER_KEY VARCHAR(255) NOT NULL,
236- TIME_CREATED TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
237- EXPIRY_TIMESTAMP TIMESTAMP NOT NULL,
238- PRIMARY KEY (UUID))
239- /
240-
241- CREATE TABLE IDN_SUBJECT_ENTITY_REVOKED_EVENT (
242- EVENT_ID VARCHAR(255) NOT NULL,
243- ENTITY_ID VARCHAR(255) NOT NULL,
244- ENTITY_TYPE VARCHAR(255) NOT NULL,
245- TIME_REVOKED TIMESTAMP NOT NULL,
246- TENANT_ID INTEGER DEFAULT -1,
247- PRIMARY KEY (EVENT_ID),
248- CONSTRAINT CON_SUB_EVT_KEY UNIQUE (ENTITY_ID, ENTITY_TYPE, TENANT_ID))
249- /
250-
251-
252- ```
253202
254203 ??? Example "H2"
255204
@@ -301,61 +250,6 @@ In large-scale WSO2 Identity Server deployments, especially with millions of use
301250 );
302251 ```
303252
304- ??? Example "MsSQL"
305-
306- ```sql
307-
308- IF NOT EXISTS (SELECT * FROM SYS.OBJECTS WHERE OBJECT_ID = OBJECT_ID(N'[DBO].[IDN_OAUTH2_REFRESH_TOKEN]') AND TYPE IN (N'U'))
309- CREATE TABLE IDN_OAUTH2_REFRESH_TOKEN (
310- REFRESH_TOKEN_ID VARCHAR (255),
311- REFRESH_TOKEN VARCHAR(2048),
312- CONSUMER_KEY_ID INTEGER,
313- AUTHZ_USER VARCHAR (100),
314- TENANT_ID INTEGER,
315- USER_DOMAIN VARCHAR(50),
316- GRANT_TYPE VARCHAR (50),
317- REFRESH_TOKEN_TIME_CREATED DATETIME,
318- REFRESH_TOKEN_VALIDITY_PERIOD BIGINT,
319- TOKEN_SCOPE_HASH VARCHAR(32),
320- TOKEN_STATE VARCHAR(25) DEFAULT 'ACTIVE',
321- SUBJECT_IDENTIFIER VARCHAR(255),
322- REFRESH_TOKEN_HASH VARCHAR(512),
323- IDP_ID INTEGER DEFAULT -1 NOT NULL,
324- PRIMARY KEY (REFRESH_TOKEN_ID),
325- FOREIGN KEY (CONSUMER_KEY_ID) REFERENCES IDN_OAUTH_CONSUMER_APPS(ID) ON DELETE CASCADE
326- );
327-
328- IF NOT EXISTS (SELECT * FROM SYS.OBJECTS WHERE OBJECT_ID = OBJECT_ID(N'[DBO].[IDN_OAUTH2_REFRESH_TOKEN_SCOPE]') AND TYPE IN (N'U'))
329- CREATE TABLE IDN_OAUTH2_REFRESH_TOKEN_SCOPE (
330- REFRESH_TOKEN_ID VARCHAR (255),
331- TOKEN_SCOPE VARCHAR (255),
332- TENANT_ID INTEGER DEFAULT -1,
333- PRIMARY KEY (REFRESH_TOKEN_ID, TOKEN_SCOPE),
334- FOREIGN KEY (REFRESH_TOKEN_ID) REFERENCES IDN_OAUTH2_REFRESH_TOKEN(REFRESH_TOKEN_ID) ON DELETE CASCADE
335- );
336-
337- IF NOT EXISTS (SELECT * FROM SYS.OBJECTS WHERE OBJECT_ID = OBJECT_ID(N'[DBO].[IDN_OAUTH2_REVOKED_TOKENS]') AND TYPE IN (N'U'))
338- CREATE TABLE IDN_OAUTH2_REVOKED_TOKENS (
339- UUID VARCHAR(255) NOT NULL,
340- TOKEN_IDENTIFIER VARCHAR(2048) NOT NULL,
341- CONSUMER_KEY VARCHAR(255) NOT NULL,
342- TIME_CREATED DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
343- EXPIRY_TIMESTAMP DATETIME NOT NULL,
344- PRIMARY KEY (UUID)
345- );
346-
347- IF NOT EXISTS (SELECT * FROM SYS.OBJECTS WHERE OBJECT_ID = OBJECT_ID(N'[DBO].[IDN_SUBJECT_ENTITY_REVOKED_EVENT]') AND TYPE IN (N'U'))
348- CREATE TABLE IDN_SUBJECT_ENTITY_REVOKED_EVENT (
349- EVENT_ID VARCHAR(255) NOT NULL,
350- ENTITY_ID VARCHAR(255) NOT NULL,
351- ENTITY_TYPE VARCHAR(255) NOT NULL,
352- TIME_REVOKED DATETIME NOT NULL,
353- TENANT_ID INTEGER DEFAULT -1,
354- PRIMARY KEY (EVENT_ID),
355- CONSTRAINT CON_SUB_EVT_KEY UNIQUE (ENTITY_ID, ENTITY_TYPE, TENANT_ID)
356- );
357- ```
358-
359253 ??? Example "MYSQL"
360254
361255 ```sql
@@ -494,182 +388,6 @@ In large-scale WSO2 Identity Server deployments, especially with millions of use
494388
495389 ```
496390
497- ??? Example "Oracle"
498-
499- ```sql
500- CREATE TABLE IDN_OAUTH2_REFRESH_TOKEN (
501- REFRESH_TOKEN_ID VARCHAR (255),
502- REFRESH_TOKEN VARCHAR(2048),
503- CONSUMER_KEY_ID INTEGER,
504- AUTHZ_USER VARCHAR (100),
505- TENANT_ID INTEGER,
506- USER_DOMAIN VARCHAR(50),
507- GRANT_TYPE VARCHAR (50),
508- REFRESH_TOKEN_TIME_CREATED TIMESTAMP,
509- REFRESH_TOKEN_VALIDITY_PERIOD BIGINT,
510- TOKEN_SCOPE_HASH VARCHAR(32),
511- TOKEN_STATE VARCHAR(25) DEFAULT 'ACTIVE',
512- SUBJECT_IDENTIFIER VARCHAR(255),
513- REFRESH_TOKEN_HASH VARCHAR(512),
514- IDP_ID INTEGER DEFAULT -1 NOT NULL,
515- PRIMARY KEY (REFRESH_TOKEN_ID),
516- FOREIGN KEY (CONSUMER_KEY_ID) REFERENCES IDN_OAUTH_CONSUMER_APPS(ID) ON DELETE CASCADE
517- )
518- /
519- CREATE TABLE IDN_OAUTH2_REFRESH_TOKEN_SCOPE (
520- REFRESH_TOKEN_ID VARCHAR2 (255),
521- TOKEN_SCOPE VARCHAR2 (255),
522- TENANT_ID INTEGER DEFAULT -1,
523- PRIMARY KEY (REFRESH_TOKEN_ID, TOKEN_SCOPE),
524- FOREIGN KEY (REFRESH_TOKEN_ID) REFERENCES IDN_OAUTH2_REFRESH_TOKEN(REFRESH_TOKEN_ID) ON DELETE CASCADE
525- )
526- /
527-
528- CREATE TABLE IDN_OAUTH2_REVOKED_TOKENS (
529- UUID VARCHAR(255) NOT NULL,
530- TOKEN_IDENTIFIER VARCHAR(2048) NOT NULL,
531- CONSUMER_KEY VARCHAR(255) NOT NULL,
532- TIME_CREATED TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL,
533- EXPIRY_TIMESTAMP TIMESTAMP NOT NULL,
534- PRIMARY KEY (UUID)
535- )
536- /
537-
538- CREATE TABLE IDN_SUBJECT_ENTITY_REVOKED_EVENT (
539- EVENT_ID VARCHAR(255) NOT NULL,
540- ENTITY_ID VARCHAR(255) NOT NULL,
541- ENTITY_TYPE VARCHAR(255) NOT NULL,
542- TIME_REVOKED TIMESTAMP NOT NULL,
543- TENANT_ID INTEGER DEFAULT -1,
544- PRIMARY KEY (EVENT_ID),
545- CONSTRAINT CON_SUB_EVT_KEY UNIQUE (ENTITY_ID, ENTITY_TYPE, TENANT_ID)
546- )
547- /
548- ```
549-
550- ??? Example "OracleRac"
551-
552- ```sql
553- CREATE TABLE IDN_OAUTH2_REFRESH_TOKEN (
554- REFRESH_TOKEN_ID VARCHAR (255),
555- REFRESH_TOKEN VARCHAR(2048),
556- CONSUMER_KEY_ID INTEGER,
557- AUTHZ_USER VARCHAR (100),
558- TENANT_ID INTEGER,
559- USER_DOMAIN VARCHAR(50),
560- GRANT_TYPE VARCHAR (50),
561- REFRESH_TOKEN_TIME_CREATED TIMESTAMP,
562- REFRESH_TOKEN_VALIDITY_PERIOD BIGINT,
563- TOKEN_SCOPE_HASH VARCHAR(32),
564- TOKEN_STATE VARCHAR(25) DEFAULT 'ACTIVE',
565- SUBJECT_IDENTIFIER VARCHAR(255),
566- REFRESH_TOKEN_HASH VARCHAR(512),
567- IDP_ID INTEGER DEFAULT -1 NOT NULL,
568- PRIMARY KEY (REFRESH_TOKEN_ID),
569- FOREIGN KEY (CONSUMER_KEY_ID) REFERENCES IDN_OAUTH_CONSUMER_APPS(ID) ON DELETE CASCADE
570- )
571- /
572- CREATE TABLE IDN_OAUTH2_REFRESH_TOKEN_SCOPE (
573- REFRESH_TOKEN_ID VARCHAR2 (255),
574- TOKEN_SCOPE VARCHAR2 (255),
575- TENANT_ID INTEGER DEFAULT -1,
576- PRIMARY KEY (REFRESH_TOKEN_ID, TOKEN_SCOPE),
577- FOREIGN KEY (REFRESH_TOKEN_ID) REFERENCES IDN_OAUTH2_REFRESH_TOKEN(REFRESH_TOKEN_ID) ON DELETE CASCADE
578- )
579- /
580-
581- CREATE TABLE IDN_OAUTH2_REVOKED_TOKENS (
582- UUID VARCHAR(255) NOT NULL,
583- TOKEN_IDENTIFIER VARCHAR(2048) NOT NULL,
584- CONSUMER_KEY VARCHAR(255) NOT NULL,
585- TIME_CREATED TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL,
586- EXPIRY_TIMESTAMP TIMESTAMP NOT NULL,
587- PRIMARY KEY (UUID)
588- )
589- /
590-
591- CREATE TABLE IDN_SUBJECT_ENTITY_REVOKED_EVENT (
592- EVENT_ID VARCHAR(255) NOT NULL,
593- ENTITY_ID VARCHAR(255) NOT NULL,
594- ENTITY_TYPE VARCHAR(255) NOT NULL,
595- TIME_REVOKED TIMESTAMP NOT NULL,
596- TENANT_ID INTEGER DEFAULT -1,
597- PRIMARY KEY (EVENT_ID),
598- CONSTRAINT CON_SUB_EVT_KEY UNIQUE (ENTITY_ID, ENTITY_TYPE, TENANT_ID)
599- )
600- /
601- ```
602-
603- ??? Example "Postgres"
604-
605- ```sql
606- CREATE TABLE IF NOT EXISTS IDN_OAUTH2_REFRESH_TOKEN (
607- REFRESH_TOKEN_ID VARCHAR(255) PRIMARY KEY,
608- REFRESH_TOKEN VARCHAR(2048),
609- CONSUMER_KEY_ID INTEGER,
610- AUTHZ_USER VARCHAR(100),
611- TENANT_ID INTEGER,
612- USER_DOMAIN VARCHAR(50),
613- GRANT_TYPE VARCHAR(50),
614- REFRESH_TOKEN_TIME_CREATED TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
615- REFRESH_TOKEN_VALIDITY_PERIOD BIGINT,
616- TOKEN_SCOPE_HASH VARCHAR(32),
617- TOKEN_STATE VARCHAR(25) DEFAULT 'ACTIVE',
618- SUBJECT_IDENTIFIER VARCHAR(255),
619- REFRESH_TOKEN_HASH VARCHAR(512),
620- IDP_ID INTEGER NOT NULL DEFAULT -1,
621- FOREIGN KEY (CONSUMER_KEY_ID) REFERENCES IDN_OAUTH_CONSUMER_APPS(ID) ON DELETE CASCADE
622- );
623-
624- CREATE TABLE IF NOT EXISTS IDN_OAUTH2_REFRESH_TOKEN_SCOPE (
625- REFRESH_TOKEN_ID VARCHAR(255),
626- TOKEN_SCOPE VARCHAR(255),
627- TENANT_ID INTEGER DEFAULT -1,
628- PRIMARY KEY (REFRESH_TOKEN_ID, TOKEN_SCOPE),
629- FOREIGN KEY (REFRESH_TOKEN_ID) REFERENCES IDN_OAUTH2_REFRESH_TOKEN(REFRESH_TOKEN_ID) ON DELETE CASCADE
630- );
631-
632- CREATE TABLE IF NOT EXISTS IDN_OAUTH2_REVOKED_TOKENS (
633- UUID VARCHAR(255) NOT NULL PRIMARY KEY,
634- TOKEN_IDENTIFIER VARCHAR(2048) NOT NULL,
635- CONSUMER_KEY VARCHAR(255) NOT NULL,
636- TIME_CREATED TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
637- EXPIRY_TIMESTAMP TIMESTAMP NOT NULL
638- );
639-
640- CREATE TABLE IF NOT EXISTS IDN_SUBJECT_ENTITY_REVOKED_EVENT (
641- EVENT_ID VARCHAR(255) NOT NULL PRIMARY KEY,
642- ENTITY_ID VARCHAR(255) NOT NULL,
643- ENTITY_TYPE VARCHAR(100) NOT NULL,
644- TIME_REVOKED TIMESTAMP NOT NULL,
645- TENANT_ID INTEGER DEFAULT -1,
646- CONSTRAINT IDN_SUBJECT_ENTITY_REVOKED_EVENT_CONSTRAINT
647- UNIQUE (ENTITY_ID, ENTITY_TYPE, TENANT_ID)
648- );
649- -- IDN_OAUTH2_REVOKED_TOKENS
650- CREATE INDEX IF NOT EXISTS idx_token_consumer
651- ON IDN_OAUTH2_REVOKED_TOKENS (token_identifier, consumer_key);
652-
653- -- IDN_SUBJECT_ENTITY_REVOKED_EVENT
654- CREATE INDEX IF NOT EXISTS idx_entity_time_revoked
655- ON IDN_SUBJECT_ENTITY_REVOKED_EVENT (entity_id, time_revoked);
656-
657- -- IDN_OAUTH2_REFRESH_TOKEN
658- CREATE INDEX IF NOT EXISTS idx_refresh_token_hash
659- ON IDN_OAUTH2_REFRESH_TOKEN (refresh_token_hash);
660-
661- CREATE INDEX IF NOT EXISTS idx_authz_user_tenant_domain_state
662- ON IDN_OAUTH2_REFRESH_TOKEN (authz_user, tenant_id, user_domain, token_state);
663-
664- CREATE INDEX IF NOT EXISTS idx_consumer_key_state
665- ON IDN_OAUTH2_REFRESH_TOKEN (consumer_key_id, token_state);
666-
667- CREATE INDEX IF NOT EXISTS idx_consumer_user_scope_idp
668- ON IDN_OAUTH2_REFRESH_TOKEN
669- (consumer_key_id, authz_user, tenant_id, user_domain, token_scope_hash, token_state, idp_id);
670-
671- ```
672-
673391!!! note "Custom JWT Token Issuer"
674392 If you already use a custom JWT token issuer that extends
675393 [ ` JWTTokenIssuer ` ] ( https://github.com/wso2-extensions/identity-inbound-auth-oauth/blob/master/components/org.wso2.carbon.identity.oauth/src/main/java/org/wso2/carbon/identity/oauth2/token/JWTTokenIssuer.java ) ,
0 commit comments