Edge for Private Cloud v4.18.05
En este documento, se describe cómo habilitar la recuperación y revocación de tokens de acceso de OAuth 2.0 por ID de usuario final, ID de app o ambos.
Los IDs de app se agregan automáticamente a un token de acceso de OAuth. Por lo tanto, después de usar el siguiente procedimiento para habilitar el acceso a tokens de una organización, podrás acceder a los tokens por ID de app.
Para recuperar y revocar tokens de acceso de OAuth 2.0 por ID de usuario final, debe haber un ID de usuario final en el token de acceso. En el siguiente procedimiento, se describe cómo agregar un ID de usuario final a un token existente o a tokens nuevos.
De forma predeterminada, cuando Edge genera un token de acceso de OAuth 2.0, el token tiene el siguiente formato:
{ "issued_at" : "1421847736581", "application_name" : "a68d01f8-b15c-4be3-b800-ceae8c456f5a", "scope" : "READ", "status" : "approved", "api_product_list" : "[PremiumWeatherAPI]", "expires_in" : "3599", "developer.email" : "tesla@weathersample.com", "organization_id" : "0", "token_type" : "BearerToken", "client_id" : "k3nJyFJIA3p62DWOkLO6OJNi87GYXFmP", "access_token" : "7S22UqXGJDTuUADGzJzjXzXSaGJL", "organization_name" : "myorg", "refresh_token_expires_in" : "0", "refresh_count" : "0" }
Ten en cuenta lo siguiente:
- El campo
application_name
contiene el UUID de la app asociada con el token. Si habilitas la recuperación y revocación de tokens de acceso de OAuth 2.0 por ID de app, este es el ID de app que usarás. - El campo
access_token
contiene el valor del token de acceso de OAuth 2.0.
Para habilitar la recuperación y revocación de tokens de acceso de OAuth 2.0 por ID del usuario final, configura la política de OAuth 2.0 para incluir el ID de usuario en el token, como se describe en el siguiente procedimiento.
El ID del usuario final es la cadena que Edge usa como ID del desarrollador, no la dirección de correo electrónico del desarrollador. Puedes determinar el ID del desarrollador a partir de su dirección de correo electrónico con la llamada a la API de Get Developer.
Después de configurar Edge para que incluya el ID del usuario final en el token, se incluye como el campo app_enduser, como se muestra a continuación:
{ "issued_at" : "1421847736581", "application_name" : "a68d01f8-b15c-4be3-b800-ceae8c456f5a", "scope" : "READ", "app_enduser" : "6ZG094fgnjNf02EK", "status" : "approved", "api_product_list" : "[PremiumWeatherAPI]", "expires_in" : "3599", "developer.email" : "tesla@weathersample.com", "organization_id" : "0", "token_type" : "BearerToken", "client_id" : "k3nJyFJIA3p62DWOkLO6OJNi87GYXFmP", "access_token" : "7S22UqXGJDTuUADGzJzjXzXSaGJL", "organization_name" : "myorg", "refresh_token_expires_in" : "0", "refresh_count" : "0" }
APIs para recuperar y revocar tokens de acceso de OAuth 2.0 por ID de usuario e ID de app
Usa las siguientes APIs para acceder a los tokens de OAuth por ID de usuario, ID de app o ambos:
- Obtén un token de acceso de OAuth 2.0 por ID de usuario final o ID de app
- Cómo revocar un token de acceso de OAuth 2.0 por ID de usuario final o ID de app
Procedimiento para habilitar el acceso de tokens
Usa el siguiente procedimiento para habilitar la recuperación y revocación de tokens de acceso de OAuth 2.0 por ID de usuario final e ID de app.
Paso 1: Habilita la compatibilidad con el acceso de tokens para una organización
Debes habilitar el acceso a los tokens para cada organización por separado. Llama a la API de PUT que aparece a continuación para cada organización en la que deseas habilitar la recuperación y revocación de tokens de acceso de OAuth 2.0 por ID de usuario final o ID de app.
El usuario que realiza la siguiente llamada debe tener el rol orgadmin o opsadmin
en la organización. Reemplaza values por los valores específicos de tu organización:
curl -H "Content-type:text/xml" -X POST \ https://management_server_IP;:8080/v1/organizations/org_name \ -d '<Organization name="org_name"> <Properties> <Property name="features.isOAuthRevokeEnabled">true</Property> <Property name="features.isOAuth2TokenSearchEnabled">true</Property> </Properties> </Organization>' \ -u USER_EMAIL:PASSWORD
Paso 2: Establece los permisos para el rol de administrador de operaciones en la organización
Solo las funciones orgadmin
y opsadmin
de una organización deben tener permisos para recuperar (HTTP GET) y revocar (HTTP PUT) tokens de OAuth 2.0 según el ID del usuario o el ID de la app. Para controlar el acceso, establece permisos de get y put en el recurso /oauth2 de una organización. Ese recurso tiene una URL con el siguiente formato:
https://management_server_IP:8080/v1/organizations/org_name/oauth2
El rol orgadmin
ya debería tener los permisos necesarios. Para el rol opsadmin
del recurso /oauth2, los permisos deberían verse de la siguiente manera:
<ResourcePermission path="/oauth2"> <Permissions> <Permission>get</Permission> <Permission>put</Permission> </Permissions> </ResourcePermission>
Puedes usar la llamada a la API Obtener permiso para una API de un solo recurso para ver qué roles tienen permisos para el recurso /oauth2
.
Según la respuesta, puedes usar las llamadas a la API Add Permissions for Resource to a Role y Delete Permission for Resource para realizar los ajustes necesarios en los permisos de recursos de /oauth2.
Usa el siguiente comando curl
para otorgar al rol opsadmin
los permisos get
y put
para el recurso /oauth2
. Reemplaza values por los valores específicos de tu organización:
curl -X POST -H 'Content-type:application/xml' \ http://management_server_IP:8080/v1/organizations/org_name/userroles/opsadmin/permissions \ -d '<ResourcePermission path="/oauth2"> <Permissions> <Permission>get</Permission> <Permission>put</Permission> </Permissions> </ResourcePermission>' \ -u USEREMAIL:PASSWORD
Usa el siguiente comando curl
para revocar los permisos get
y put
del recurso /oauth2
de roles que no sean orgadmin
y opsadmin
. Reemplaza values por los valores específicos de tu organización:
curl -X DELETE -H 'Content-type:application/xml' \ http://management_server_IP:8080/v1/organizations/org_name/userroles/roles/permissions \ -d '<ResourcePermission path="/oauth2"> <Permissions></Permissions> </ResourcePermission>' \ -u USEREMAIL:PASSWORD
Paso 3: Configura la propiedad oauth_max_search_limit
Asegúrate de que la propiedad conf_keymanagement_oauth_max_search_limit
del archivo /opt/apigee/customer/application/management-server.properties
esté configurada en 100:
conf_keymanagement_oauth_max_search_limit = 100
Si este archivo no existe, créalo.
Esta propiedad establece el tamaño de página que se usa cuando se recuperan los tokens. Apigee recomienda un valor de 100, pero puedes establecerlo como desees.
En una instalación nueva, la propiedad ya debería estar configurada en 100. Si tienes que cambiar el valor de esta propiedad, reinicia el servidor de administración y el procesador de mensajes con los siguientes comandos:
/opt/apigee/apigee-service/bin/apigee-service edge-management-server restart
/opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart
Paso 4: Configura la política de OAuth 2.0 que genera tokens para incluir el ID del usuario final
Configura la política de OAuth 2.0 que se usa para generar tokens de acceso para incluir el ID del usuario final en el token. Cuando se incluyen los IDs de usuario final en el token de acceso, puedes recuperar y revocar los tokens por ID.
Para configurar que la política incluya un ID de usuario final en un token de acceso, la solicitud que crea el token de acceso debe incluir el ID de usuario final y debes especificar la variable de entrada que lo contiene.
La siguiente política de OAuth 2.0, llamada GenerateAccessTokenClient, genera un token de acceso de OAuth 2.0. Observa el agregado de la etiqueta <AppEndUser>
en negrita que especifica la variable que contiene el ID del usuario final:
<OAuthV2 async="false" continueOnError="false" enabled="true" name="GenerateAccessTokenClient"> <DisplayName>OAuth 2.0.0 1</DisplayName> <ExternalAuthorization>false</ExternalAuthorization> <Operation>GenerateAccessToken</Operation> <SupportedGrantTypes> <GrantType>client_credentials</GrantType> </SupportedGrantTypes> <GenerateResponse enabled="true"/> <GrantType>request.queryparam.grant_type</GrantType> <AppEndUser>request.header.appuserID</AppEndUser> <ExpiresIn>960000</ExpiresIn> </OAuthV2>
Luego, puedes usar el siguiente comando curl
para generar el token de acceso de OAuth 2.0 y pasar el ID de usuario como el encabezado appuserID
:
curl -H "appuserID:6ZG094fgnjNf02EK" \ https://myorg-test.apigee.net/oauth/client_credential/accesstoken?grant_type=client_credentials \ -X POST -d 'client_id=k3nJyFJIA3p62TKIkLO6OJNXFmP&client_secret=gk5K5lIp943AY4'
En este ejemplo, appuserID
se pasa como un encabezado de solicitud. Puedes pasar información como parte de una solicitud de muchas maneras. Por ejemplo, como alternativa, puedes hacer lo siguiente:
- Usa una variable de parámetro de formulario:
request.formparam.appuserID
- Usa una variable de flujo que proporcione el ID de usuario final