Inicio rápido: apps de fondo de Liberty for Java
Con App ID, puede proteger fácilmente los puntos finales de API y garantizar la seguridad de las aplicaciones de fondo de Liberty for Java. Con la guía, puede obtener rápidamente un flujo de autenticación sencillo y tenerlo en ejecución en menos de 20 minutos.
- Para realizar una solicitud a un recurso protegido, los clientes deben tener una señal de acceso. En el paso 1, el cliente solicita una señal a App ID. Para obtener más información sobre la obtención de señales de acceso, consulte Obtención de señales.
- App ID devuelve las señales.
- Utilizando la señal de acceso, el cliente hace una solicitud para acceder al recurso protegido.
- El recurso valida la señal que incluye la estructura, la caducidad, la firma, la audiencia y cualquier otro campo presente. Si la señal no es válida, el servidor de recursos deniega el acceso. Si la validación de la señal es satisfactoria, devuelve los datos.
Antes de empezar
Antes de empezar con App ID en la aplicación de fondo Liberty for Java, debe tener los requisitos previos siguientes:
- Una instancia del servicio App ID
- La CLI de IBM Cloud
- Apache Maven 3.5 +
- Java 8 +
¿No tiene una app con la que poder probar el flujo? ¡No hay ningún problema! App ID proporciona una app de ejemplo simple de Liberty for Java.
Obtener las credenciales
Puede obtener sus credenciales de dos maneras.
-
Vaya al separador Aplicaciones del panel de control de App ID. Si aún no dispone de una, puede pulsar Añadir aplicación para crear una nueva.
-
Realizando una solicitud POST al punto final de
/management/v4/<tenantID>/applications.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" } ```
Configurar el archivo server.xml
-
Abra el archivo
server.xml. -
Añada las características siguientes a la sección
featureManager. Es posible que algunas características puedan estar incluidas con Liberty. Si recibe un error al ejecutar el servidor, los puede instalar ejecutando.installUtility install {name_of_server}desde el directorio bin de la instalación de Liberty.<featureManager> <feature>appSecurity-2.0</feature> <feature>openidConnectClient-1.0</feature> <feature>ssl-1.0</feature> <feature>servlet-3.1</feature> </featureManager> -
Configure SSL añadiendo lo siguiente al archivo
server.xml.<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}"/> -
Cree una característica de Open ID Connect Client y defina los siguientes marcadores de posición. Con las credenciales que ha obtenido, rellene los marcadores.
<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" />Variables del elemento de OIDC para las apps de Liberty for Java Variable Descripción idEl nombre de la aplicación. inboundPropagationPara propagar la información recibida en la señal, el valor debe establecerse en "obligatorio". jwkEndpointUrlEl punto final que se utiliza para obtener claves para validar la señal. Obtenga más información sobre las regiones disponibles. Puede encontrar el ID de arrendatario en las credenciales que ha creado previamente. issuerIdentifierEl identificador de emisor define el servidor de autorización. Obtenga más información sobre las regiones disponibles. Puede encontrar el ID de arrendatario en las credenciales que ha creado previamente. signatureAlgorithmEspecificado como "RS256". audiencesDe forma predeterminada, la señal se emite para el ID de cliente de App ID que se encuentra en las credenciales de la aplicación. sslRefEl nombre de la configuración de SSL que desea utilizar. -
Defina el tipo de sujeto especial como
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>
Configurar el archivo web.xml
En el archivo web.xml, defina las áreas de la aplicación que desea proteger.
-
Defina un rol de seguridad. Este rol debe ser el mismo que el que ha definido en el archivo
server.xml.<security-role> <role-name>myrole</role-name> </security-role> -
Defina una restricción de seguridad.
<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>
Probar la configuración
Ahora que ha terminado la instalación inicial, cree la aplicación y pruebe la configuración para asegurarse de que todo funciona como se esperaba.
-
Cambie al directorio de la aplicación.
-
Cree la aplicación.
server run -
Realice una solicitud al punto final protegido. Se devuelve un error.
-
Con la señal de acceso que ha obtenido en el paso anterior, realice una solicitud al punto final. Ahora puede acceder al punto final protegido. Verifique que la respuesta contiene la información esperada.