注册 OAuth 客户机
OAuth 客户机或者第三方服务应用程序必须将其自身向 WebSphere® Application Server OAuth2 服务提供程序进行注册。已注册的客户机作为 XML 文件进行存储或者存储在数据库表中。
要将已注册的客户机作为 XML 文件进行存储,请创建一个称为 base.clients.xml 的 XML 文件。此 XML 文件必须放在 WebSphere Application Server 单元目录或者节点目录中的 oauth20 目录下。样本 base.clients.xml 文件位于 WebSphere Application Server 安装版本的 properties 目录中。
要将已注册的客户机存储在数据库表中,请使用以下用于创建表的 SQL 语句。
/*Client Table*/
CREATE TABLE OAuthDBSchema.OAUTH20CLIENTCONFIG (
COMPONENTID VARCHAR(256) NOT NULL, /*Name of OAuth Provider and matches config.xml*/
CLIENTID VARCHAR(256) NOT NULL, /*ID of client*/
CLIENTSECRET VARCHAR(256), /*Client secret*/
DISPLAYNAME VARCHAR(256) NOT NULL, /*Display name of the client*/
REDIRECTURI VARCHAR(2048), /*client redirect URI*/
ENABLED INT /*int*/
);
创建用于存储文件和表的客户机之后,您可以直接添加、删除或修改客户机。还可以使用 WebSphere Application Server MBean 或编程 API 来管理客户机。
以下示例说明了使用客户机 API 进行客户机管理的样本代码:
import com.ibm.ws.security.oauth20.plugins.BaseClientProvider;
import com.ibm.ws.security.oauth20.plugins.BaseClient;
import com.ibm.ws.security.oauth20.api.OAuth20Provider;
import com.ibm.ws.security.oauth20.api.OAuth20ProviderFactory;
import com.ibm.ws.security.oauth20.plugins.db.CachedDBClientProvider;
OAuth20Provider provider = OAuth20ProviderFactory.getOAuth20Provider("<<provider_name>>");
OAuthComponentConfiguration oauthconfig = provider.getConfiguration();
CachedDBClientProvider clientProvider = new CachedDBClientProvider(); //if using Database for client store
//BaseClientProvider clientProvider = new BaseClientProvider(); //if using XML file for client store
clientProvider.init(oauthconfig);
// replace << .... >> with desired String
BaseClient newClient = new BaseClient(oauthconfig.getUniqueId(),
"<<client_id>>",
"<<client_secret>>",
"<<client displayName>>",
"<<redirect uri>>",
true);
//add a new client
clientProvider.put(newClient);
//delete a client
clientProvider.delete("<<client_id>>");
//query all registered clients
Collection<BaseClient> clients = clientProvider.getAll();
for (BaseClient client : clients) {
String client_display_name = client.getDisplayName();
String client_id = client.getClientId();
String redirect_uri = client.getRedirectUri();
}
以下示例说明了使用 MBean API 进行客户机管理的样本代码://get OAuth client mBean OAuth20ClientMBean
ObjectName objName = new ObjectName ("WebSphere:type=OAuth20ClientMBean,*");
AdminClient adminClient = ....;
// add a new client
BaseClient newClient = new BaseClient(oauthconfig.getUniqueId(),
"<<<<client_id>>",
"<<client_secret>>",
"<<client displayName>>",
"<<redirect uri>>",
true);
adminClient.invoke(objName,
"addClient",
new Object[]{newClient},
new String[]{newClient.getClass().getName()});
//delete a client by client id
adminClient.invoke(objName,
"removeClient",
new Object[]{providerName, "<<client id>>"},
new String[]{providerName.getClass().getName(),
clientName.getClass().getName()});