oauth adobe aem postman experience-manager

403 Respuesta de Adobe Experience Manager OAuth 2 Token Endpoint



aem postman (3)

Estoy usando Postman para probar OAuth 2 desde una instalación vanica de AEM.

El cartero puede obtener con éxito el código de autorización de / oauth / authorize después de otorgar acceso:

Pero cuando trata de usar el código para obtener un token de / oauth / token recibe la siguiente respuesta:

HTTP ERROR: 403 Problema al acceder / oauth / token. Motivo: Prohibido Alimentado por Jetty: //

Buscando en Fiddler está haciendo una POST to / oauth / token con los siguientes Name / Values ​​en el cuerpo:

client_id: ID de cliente de /libs/granite/oauth/content/client.html

client_secret: Client Secret de /libs/granite/oauth/content/client.html

redirect_uri: https://www.getpostman.com/oauth2/callback

grant_type: authorization_code

código: código devuelto por solicitud previa para oauth / authorize

¿Me estoy perdiendo de algo?


Sería útil si puede enumerar algunos fragmentos de código sobre cómo está compilando la url y obteniendo el token.

Aquí hay un ejemplo de cómo lo hemos implementado de manera muy similar a lo que está tratando de hacer, quizás ayude.

Defina un servicio como a continuación (fragmento) y defina los valores (host, url, etc.) en OSGI (o también puede codificarlos con fines de prueba)

@Service(value = OauthAuthentication.class) @Component(immediate = true, label = "My Oauth Authentication", description = "My Oauth Authentication", policy = ConfigurationPolicy.REQUIRE, metatype = true) @Properties({ @Property(name = Constants.SERVICE_VENDOR, value = "ABC"), @Property(name = "service.oauth.host", value = "", label = "Oauth Host", description = "Oauth Athentication Server"), @Property(name = "service.oauth.url", value = "/service/oauth/token", label = "Oauth URL", description = "Oauth Authentication URL relative to the host"), @Property(name = "service.oauth.clientid", value = "", label = "Oauth Client ID", description = "Oauth client ID to use in the authentication procedure"), @Property(name = "service.oauth.clientsecret", value = "", label = "Oauth Client Secret", description = "Oauth client secret to use in the authentication procedure"), @Property(name = "service.oauth.granttype", value = "", label = "Oauth Grant Type", description = "Oauth grant type") }) public class OauthAuthentication { ... @Activate private void activate(ComponentContext context) { Dictionary<String, Object> properties = context.getProperties(); host = OsgiUtil.toString(properties, PROPERTY_SERVICE_OAUTH_HOST,new String()); // Similarly get all values url = clientID = clientSecret = grantType = authType = "Basic" + " "+ Base64.encode(new String(clientID + ":" + clientSecret)); } public static void getAuthorizationToken( try { UserManager userManager = resourceResolver.adaptTo(UserManager.class); Session session = resourceResolver.adaptTo(Session.class); // Getting the current user Authorizable auth = userManager.getAuthorizable(session.getUserID()); user = auth.getID(); password = ... ... ... String serviceURL = (host.startsWith("http") ? "": protocol + "://") + host + url; httpclient = HttpClients.custom().build(); HttpPost httppost = new HttpPost(serviceURL); // set params ArrayList<BasicNameValuePair> formparams = new ArrayList<BasicNameValuePair>(); formparams.add(new BasicNameValuePair("username", user)); formparams.add(new BasicNameValuePair("password", password)); formparams.add(new BasicNameValuePair("client_id", clientID)); formparams.add(new BasicNameValuePair("client_secret",clientSecret)); formparams.add(new BasicNameValuePair("grant_type",grantType)); UrlEncodedFormEntity postEntity = new UrlEncodedFormEntity(formparams, "UTF-8"); httppost.setEntity(postEntity); // set header httppost.addHeader("Authorization", authType); response = httpclient.execute(httppost); HttpEntity entity = response.getEntity(); if (response.getStatusLine().getStatusCode() == 200) { if (entity != null) { object = new JSONObject(EntityUtils.toString(entity)); } if (object != null) { accessToken = object.getString("access_token"); //// } } }


Encontré la respuesta yo mismo y pensé que compartiría el proceso y la respuesta, ya que podría ayudar a otras personas nuevas en AEM.

Cómo encontrar la causa del error:

  1. Ir a CRXDE Lite.
  2. Seleccione la consola.
  3. Luego anule la selección del botón de detención para permitir que aparezcan los nuevos registros de la consola (esto es muy contrario a la intuición).

Desde aquí pude ver la causa del problema:

org.apache.sling.security.impl.ReferrerFilter Rechazó el encabezado de referencia vacío para la solicitud POST a / oauth / token

Debido a que el cartero no coloca una referencia en el encabezado de la solicitud, tuve que decirle a Apache Sling que permita encabezados de solicitud vacíos.

Para hacer esto:

  1. Vaya a / system / console / configMgr
  2. Abra Apache Sling Referrer Filter Config
  3. Seleccione la casilla de verificación Permitir vacío


Es una buena forma de permitir que esto liste los hosts permitidos, de lo contrario esto está en contra de las mejores prácticas para la lista de verificación de seguridad de AEM.

Está bien para el entorno de desarrollo, no para la producción.