CREATE TABLE oauth2_authorization (
                                      id varchar(100) NOT NULL COMMENT '授权记录的唯一标识符',
                                      registered_client_id varchar(100) NOT NULL COMMENT '注册客户端的ID，关联到客户端注册表',
                                      principal_name varchar(200) NOT NULL COMMENT '授权主体的名称（通常是用户ID或用户名）',
                                      authorization_grant_type varchar(100) NOT NULL COMMENT '授权类型（如：authorization_code, client_credentials, refresh_token等）',
                                      authorized_scopes varchar(1000) DEFAULT NULL COMMENT '已授权的范围（用空格分隔的scope列表）',
                                      attributes blob DEFAULT NULL COMMENT '附加属性，以二进制格式存储',
                                      state varchar(500) DEFAULT NULL COMMENT 'OAuth2状态参数，用于防止CSRF攻击',
                                      authorization_code_value blob DEFAULT NULL COMMENT '授权码的值（加密存储）',
                                      authorization_code_issued_at timestamp NULL DEFAULT NULL COMMENT '授权码的颁发时间',
                                      authorization_code_expires_at timestamp NULL DEFAULT NULL COMMENT '授权码的过期时间',
                                      authorization_code_metadata blob DEFAULT NULL COMMENT '授权码的元数据',
                                      access_token_value blob DEFAULT NULL COMMENT '访问令牌的值（加密存储）',
                                      access_token_issued_at timestamp NULL DEFAULT NULL COMMENT '访问令牌的颁发时间',
                                      access_token_expires_at timestamp NULL DEFAULT NULL COMMENT '访问令牌的过期时间',
                                      access_token_metadata blob DEFAULT NULL COMMENT '访问令牌的元数据',
                                      access_token_type varchar(100) DEFAULT NULL COMMENT '访问令牌类型（如：Bearer）',
                                      access_token_scopes varchar(1000) DEFAULT NULL COMMENT '访问令牌的有效范围',
                                      oidc_id_token_value blob DEFAULT NULL COMMENT 'OIDC ID令牌的值（加密存储）',
                                      oidc_id_token_issued_at timestamp NULL DEFAULT NULL COMMENT 'OIDC ID令牌的颁发时间',
                                      oidc_id_token_expires_at timestamp NULL DEFAULT NULL COMMENT 'OIDC ID令牌的过期时间',
                                      oidc_id_token_metadata blob DEFAULT NULL COMMENT 'OIDC ID令牌的元数据',
                                      refresh_token_value blob DEFAULT NULL COMMENT '刷新令牌的值（加密存储）',
                                      refresh_token_issued_at timestamp NULL DEFAULT NULL COMMENT '刷新令牌的颁发时间',
                                      refresh_token_expires_at timestamp NULL DEFAULT NULL COMMENT '刷新令牌的过期时间',
                                      refresh_token_metadata blob DEFAULT NULL COMMENT '刷新令牌的元数据',
                                      user_code_value blob DEFAULT NULL COMMENT '设备流用户码的值（加密存储）',
                                      user_code_issued_at timestamp NULL DEFAULT NULL COMMENT '设备流用户码的颁发时间',
                                      user_code_expires_at timestamp NULL DEFAULT NULL COMMENT '设备流用户码的过期时间',
                                      user_code_metadata blob DEFAULT NULL COMMENT '设备流用户码的元数据',
                                      device_code_value blob DEFAULT NULL COMMENT '设备流设备码的值（加密存储）',
                                      device_code_issued_at timestamp NULL DEFAULT NULL COMMENT '设备流设备码的颁发时间',
                                      device_code_expires_at timestamp NULL DEFAULT NULL COMMENT '设备流设备码的过期时间',
                                      device_code_metadata blob DEFAULT NULL COMMENT '设备流设备码的元数据',
                                      PRIMARY KEY (id)
) COMMENT='OAuth2 授权表，存储所有OAuth2和OpenID Connect的授权信息';

CREATE INDEX idx_registered_client_id ON oauth2_authorization(registered_client_id);
CREATE INDEX idx_principal_name ON oauth2_authorization(principal_name);
CREATE INDEX idx_state ON oauth2_authorization(state);
CREATE INDEX idx_access_token_expires_at ON oauth2_authorization(access_token_expires_at);
CREATE INDEX idx_refresh_token_expires_at ON oauth2_authorization(refresh_token_expires_at);
CREATE INDEX idx_authorization_code_expires_at ON oauth2_authorization(authorization_code_expires_at);


CREATE TABLE oauth2_authorization_consent (
                                              registered_client_id varchar(100) NOT NULL COMMENT '注册客户端的ID，关联到客户端注册表',
                                              principal_name varchar(200) NOT NULL COMMENT '授权主体的名称（通常是用户ID或用户名）',
                                              authorities varchar(1000) NOT NULL COMMENT '已授予的权限列表（逗号分隔的权限字符串）',
                                              PRIMARY KEY (registered_client_id, principal_name)
) COMMENT='OAuth2授权同意表，存储用户对客户端的授权同意记录';

CREATE INDEX idx_oauth2_authorization_consent_principal_name ON oauth2_authorization_consent(principal_name);
CREATE INDEX idx_oauth2_authorization_consent_client_id ON oauth2_authorization_consent(registered_client_id);