持久 OAuth 服务配置
WebSphere® Application Server 通过将 OAuth 令牌和客户机持久存储到数据库来支持持久 OAuth 2.0 服务。借助持久 OAuth 2.0 服务,在 OAuth 服务重新启动之后,已授权的客户机可以访问 OAuth 2.0 服务。
要配置持久 OAuth 2.0 服务,请完成下列步骤:
- 配置 OAuth 2.0 服务提供者。
要使用数据库存储器,必须指定 <oauthProvider> 元素的 <databaseStore> 子元素。<databaseStore> 元素上的唯一必需属性是 <dataSourceRef>,其值必须是 <dataSource> 元素的标识。
以下示例是使用 Derby 数据库存储器的 OAuth 提供程序的样本 server.xml 文件:<server> <featureManager> <feature>oauth-2.0</feature> <feature>ssl-1.0</feature> <feature>jdbc-4.0</feature> <feature>jndi-1.0</feature> </featureManager> <keyStore password="keyspass" /> <oauth-roles> <authenticated> <user>testuser</user> </authenticated> </oauth-roles> <oauthProvider id="OAuthConfigDerby" filter="request-url%=ssodemo" oauthOnly="false"> <databaseStore dataSourceRef="OAuthFvtDataSource" /> </oauthProvider> <jdbcDriver id="DerbyEmbedded" libraryRef="DerbyLib" /> <library id="DerbyLib" fileSetRef="DerbyFileset" /> <fileset id="DerbyFileset" dir="${DERBY_JDBC_DRIVER_PATH}" includes="derby.jar" /> <dataSource id="OAuthFvtDataSource" jndiName="jdbc/OAuth2DB" jdbcDriverRef="DerbyEmbedded"> <properties.derby.embedded databaseName="D:\oauth2db" createDatabase="create"/> </dataSource> <webAppSecurity allowFailOverToBasicAuth="true" /> <basicRegistry id="basic" realm="BasicRealm"> <user name="testuser" password="testuserpwd" /> </basicRegistry> </server>
- 设置数据库和表以存储 OAuth 令牌和客户机。
- 创建用于持久 OAuth 服务的数据库。请参阅供应商文档以了解如何创建数据库。在此示例中,数据库名称是 D:\oauth2db。
- 通过以下 SQL 语句创建 3 个所定义的 OAuth 表:
----- CREATE TABLES ----- CREATE TABLE OAuthDBSchema.OAUTH20CACHE ( LOOKUPKEY VARCHAR(256) NOT NULL, UNIQUEID VARCHAR(128) NOT NULL, COMPONENTID VARCHAR(256) NOT NULL, TYPE VARCHAR(64) NOT NULL, SUBTYPE VARCHAR(64), CREATEDAT BIGINT, LIFETIME INT, EXPIRES BIGINT, TOKENSTRING VARCHAR(2048) NOT NULL, CLIENTID VARCHAR(64) NOT NULL, USERNAME VARCHAR(64) NOT NULL, SCOPE VARCHAR(512) NOT NULL, REDIRECTURI VARCHAR(2048), STATEID VARCHAR(64) NOT NULL, EXTENDEDFIELDS CLOB NOT NULL DEFAULT '{}' ); CREATE TABLE OAuthDBSchema.OAUTH20CLIENTCONFIG ( COMPONENTID VARCHAR(256) NOT NULL, CLIENTID VARCHAR(256) NOT NULL, CLIENTSECRET VARCHAR(256), DISPLAYNAME VARCHAR(256) NOT NULL, REDIRECTURI VARCHAR(2048), ENABLED INT, CLIENTMETADATA CLOB NOT NULL DEFAULT '{}' ); CREATE TABLE OAuthDBSchema.OAUTH20CONSENTCACHE ( CLIENTID VARCHAR(256) NOT NULL, USERID VARCHAR(256), PROVIDERID VARCHAR(256) NOT NULL, SCOPE VARCHAR(1024) NOT NULL, EXPIRES BIGINT, EXTENDEDFIELDS CLOB NOT NULL DEFAULT '{}' ); ----- ADD CONSTRAINTS ----- ALTER TABLE OAuthDBSchema.OAUTH20CACHE ADD CONSTRAINT PK_LOOKUPKEY PRIMARY KEY (LOOKUPKEY); ALTER TABLE OAuthDBSchema.OAUTH20CLIENTCONFIG ADD CONSTRAINT PK_COMPIDCLIENTID PRIMARY KEY (COMPONENTID,CLIENTID); ----- CREATE INDEXES ----- CREATE INDEX OAUTH20CACHE_EXPIRES ON OAUTHDBSCHEMA.OAUTH20CACHE (EXPIRES ASC);
- 配置 WebSphere Application Server。
配置 WebSphere Application Server 数据源。必须将数据源 Java™ 命名和目录接口 (JNDI) 名称设置为 jdbc/OAuth2DB。JNDI 名称必须与 server.xml 文件中 dataSource 元素的 <jndiName> 属性匹配。输入数据库名称,例如,D:\oauth2db。
有关为 OAuth 持久服务配置 DB2® 和 Derby 的更多信息,请参阅将 IBM® DB2 用于持久 OAuth 服务和将 Derby 数据库用于持久 OAuth 服务。您可以将它们用作样本模板来配置其他数据库。
- 将已注册的 OAuth 客户机添加至数据库。
要将客户机持久存储在数据库中,您必须将该客户机保存到该数据库中。下列 SQL 语句会将 OAuth 客户机 dbclient01 和 dbclient02 添加至 Derby 数据库:
CONNECT 'jdbc:derby:D:\oauth2db'; INSERT INTO OAuthDBSchema.OAUTH20CLIENTCONFIG VALUES ( 'OAuthConfigDerby', 'dbclient01', 'secret', 'dbclient01', 'http://localhost:9080/oauthclient/redirect.jsp', 1 ), ( 'OAuthConfigDerby', 'dbclient02', 'secret', 'dbclient02', 'http://localhost:9080/oauthclient/redirect.jsp', 1 ); DISCONNECT CURRENT;
注: Componentid 必须与 server.xml 文件中 oauthProvider 元素的标识相同。