快速入门: Liberty for Java 后端应用程序
通过 App ID,您可以轻松保护 API 端点,并确保 Liberty for Java 后端应用程序的安全性。 利用该指南,您可以在 20 分钟内快速建立并运行简单的身份验证流程。
{: caption="后台Liberty for Java " caption-side="bottom"}
- 要向受保护资源发出请求,客户机必须具有访问令牌。 在步骤 1 中,客户机向 App ID 发出请求以获取令牌。 有关获取访问令牌的更多信息,请参阅获取令牌。
- App ID 返回令牌。
- 客户机使用访问令牌来发出访问受保护资源的请求。
- 资源会验证令牌,其中包括结构、有效期、签名、受众和任何其他字段。 如果令牌无效,那么资源服务器将拒绝访问。 如果令牌验证成功,资源服务器将返回数据。
视频教程
请查看以下视频,以了解如何使用 App ID 来保护简单的 Liberty for Java 应用程序。 视频中涉及的所有信息也可以在本页中以书面形式找到。
您没有可以试用此流程的应用程序吗? 没有问题! App ID 提供了 简单 Liberty for Java 样本应用程序。
准备工作
在 Liberty for Java 后端应用程序中开始使用 App ID 之前,您必须具备以下先决条件:
获取凭证
可以通过以下两种方式之一来获取凭证。
-
导航至 App ID 仪表板的应用程序选项卡。 如果尚未具有应用程序,那么可以单击添加应用程序来创建新应用程序。
-
通过向
/management/v4/<tenantID>/applications
端点发出 POST 请求。Request format: ```sh {: codeblock} curl -X POST \ https://us-south.appid.cloud.ibm.com/management/v4/<tenantID>/applications/ \ -H 'Content-Type: application/json' \ -H 'Authorization: Bearer <IAMToken>' \ -d '{"name": "ApplicationName"}' ``` Example response: ```json {: screen} { "clientId": "xxxxx-34a4-4c5e-b34d-d12cc811c86d", "tenantId": "xxxxx-9b1f-433e-9d46-0a5521f2b1c4", "secret": "ZDk5YWZkYmYt*******", "name": "app1", "oAuthServerUrl": "https://us-south.appid.cloud.ibm.com/oauth/v4/xxxxx-9b1f-433e-9d46-0a5521f2b1c4", "profilesUrl": "https://us-south.appid.cloud.ibm.com", "discoveryEndpoint": "https://us-south.appid.cloud.ibm.com/oauth/v4/xxxxxx-9b1f-433e-9d46-0a5521f2b1c4/.well-known/openid-configuration" } ```
配置 server.xml
文件
-
打开
server.xml
文件。 -
将以下功能添加到
featureManager
部分。 某些功能可能内置于 Liberty。 如果运行服务器时出现错误,可从 Liberty 安装的 bin 目录中运行.installUtility install {name_of_server}
进行安装。<featureManager> <feature>appSecurity-2.0</feature> <feature>openidConnectClient-1.0</feature> <feature>ssl-1.0</feature> <feature>servlet-3.1</feature> </featureManager>
-
通过将以下内容添加到
server.xml
文件来配置 SSL。<keyStore id="defaultKeyStore" password="{password}"/> <keyStore id="RootCA" password="{password}" location="${server.config.dir}/resources/security/{myTrustStore}"/> <ssl id="{sslID}" keyStoreRef="defaultKeyStore" trustStoreRef="{truststore-ref}"/>
-
创建 OpenID Connect 客户端功能,并定义以下占位符。 使用获取的凭证来填充占位符。
<openidConnectClient id="oidc-client-simple-liberty-backend-app" inboundPropagation="required" jwkEndpointUrl="<region>.appid.cloud.ibm.com/oauth/v4/<tenantID>/publickeys" issuerIdentifier="<region>.appid.cloud.ibm.com/oauth/v4/<tenantID>" signatureAlgorithm="RS256" audiences="{client-id}" sslRef="oidcClientSSL" />
Liberty for Java 应用程序的 OIDC 元素变量 变量 描述 id
应用程序的名称。 inboundPropagation
要传播令牌中接收到的信息,该值必须设置为“必填”。 jwkEndpointUrl
用于获取密钥以验证令牌的端点。 了解有关 可用区域 的更多信息。 您可以在先前创建的凭证中找到租户标识。 issuerIdentifier
颁发者标识用于定义授权服务器。 了解有关 可用区域 的更多信息。 您可以在先前创建的凭证中找到租户标识。 signatureAlgorithm
被指定为“RS256”。 audiences
缺省情况下,将为可在应用程序凭证中找到的 App ID 客户机标识颁发令牌。 sslRef
要使用的 SSL 配置的名称。 -
将特殊主体类型定义为
ALL_AUTHENTICATED_USERS
。<application id="simple-liberty-backend-app" location="location-of-your-war-file" name="simple-liberty-backend-app" type="war"> <application-bnd> <security-role name="myrole"> <special-subject type="ALL_AUTHENTICATED_USERS"/> </security-role> </application-bnd> </application>
配置 web.xml
文件
在 web.xml
文件中,定义要保护的应用程序的区域。
-
定义安全角色。 该角色必须与您在
server.xml
文件中定义的角色相同。<security-role> <role-name>myrole</role-name> </security-role>
-
定义安全性约束。
<security-constraint> <display-name>Security Constraints</display-name> <web-resource-collection> <web-resource-name>ProtectedArea</web-resource-name> <url-pattern>/api/*</url-pattern> </web-resource-collection> <auth-constraint> <role-name>myrole</role-name> </auth-constraint> <user-data-constraint> <transport-guarantee>NONE</transport-guarantee> </user-data-constraint> </security-constraint>
测试配置
完成初始安装后,请构建应用程序并测试配置,以确保一切正常。
-
切换到应用程序目录。
-
构建应用程序。
server run
-
向受保护端点发出请求。 这将返回错误。
-
使用在上一步中获取的访问令牌,向该端点发出请求。 现在您就可以访问受保护的端点了。 验证响应是否包含期望的内容。