持續性 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> 元素的 ID。
下列範例是使用 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 陳述式所定義來建立三份 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。
如需配置 DB2® 和 Derby 以用於 OAuth 持續性服務的相關資訊,請參閱 用於持續性 OAuth 服務的 IBM® DB2 以及 用於持續性 OAuth 服務的 Derby 資料庫。您可以利用它們作為範例範本來配置其他資料庫。
- 新增登錄的 OAuth 用戶端到資料庫中。
如果要將用戶端持續保存在資料庫中,您必須將用戶端儲存在資料庫。 下列 SQL 陳述式會將 dbclient01 和 dbclient02 OAuth 用戶端新增到 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 元素的 ID 相同。