2016-01-29 3 views
6

Я использую Postman для проверки OAuth 2 с помощью установки AEM для ванили.403 Ответ от Adobe Experience Manager OAuth 2 Токен Конечная точка

enter image description here

Почтальон может успешно получить код авторизации от/OAuth/авторизовать после того как я предоставить доступ:

enter image description here

Но когда он пытается использовать код для получения маркера с/OAuth/token получает ответ:

HTTP ERROR: 403 Problem accessing /oauth/token. Reason: Forbidden Powered by Jetty://

Глядя в Скрипач, он делает Публикация в/OAuth/знак со следующими Имя/Значения в организме:

client_id: Client ID from /libs/granite/oauth/content/client.html

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

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

grant_type: authorization_code

code: Code returned from previous request to oauth/authorize

я упускаю что-то?

ответ

1

Я нашел ответ сам и подумал, что я поделюсь процессом, который прошел, а также ответом, потому что это могло бы помочь другим людям, новым для AEM.

Как найти причину ошибки:

  1. Перейти к CRXDE Lite.
  2. Выберите консоль.
  3. Затем снимите отметку с кнопки остановки, чтобы разрешить появление новых консольных журналов (это очень противоречиво для меня).

CRXDE Lite Console

Отсюда я мог видеть причину проблемы:

org.apache.sling.security.impl.ReferrerFilter Rejected empty referrer header for POST request to /oauth/token

Поскольку Почтальон не размещает реферер в заголовке запроса я должен был сказать Apache Sling, чтобы позволить пустые заголовки запросов.

Для этого:

  1. Перейти к/система/консоль/ConfigMgr
  2. Открыть Apache Sling Referrer Filter Config
  3. Выберите Разрешить пустой флажок

Apache Sling Referrer Filter Config

1

Помогло бы, если бы вы могли перечислить некоторые фрагменты кода о том, как вы создаете URL-адрес и извлекаете токен.

Вот пример того, как мы реализовали очень похожее на то, что вы пытаетесь сделать, может быть, это поможет.

Определение услуги, как показано ниже (сниппет) и определить значения (хост, URL, и т.д.) в OSGI (или вы можете также жесткий код их для целей тестирования)

 @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"); 
       //// 
      } 
      } 
     } 
+0

Спасибо, что ответили. Я использую функцию Oauth в Postman для создания URL-адресов и получения маркера, который вы можете скачать бесплатно [здесь] (https://chrome.google.com/webstore/detail/postman/fhbjgbiflinjbdggehcddcbncdddomop?hl=ru). Если вы возьмете ванильную установку AEM 6.1 и добавьте новый Oauth-клиент, а затем воспользуетесь данными клиента в Postman, тогда вы обновите мой сценарий. Я из .NET-фона, поэтому попытался создать .NET-клиент, но он тоже возвратил 403 при попытке отправить в/oauth/token. – GerardBeckerleg

+0

Возможно, я неправильно понял. Можете ли вы попробовать среду url on Publish (4503), посмотрите, не имеет значения. –

+0

Такая же проблема при работе в среде Publish (4503). – GerardBeckerleg

0

Хороший способ разрешить это перечислять разрешенные хосты, иначе это против b для проверки безопасности AEM.

Его штраф за окружающую среду не для производства.

Смежные вопросы