2016-08-11 4 views
0

Ранее задавали этот вопрос в Salesforce StackExchange, который они считали вне темы, поэтому прошу здесь посмотреть, могу ли я получить ответ.Использование немедленного = true в Salesforce OAuth flow


фон

Я пытаюсь использовать непосредственный параметр, чтобы проверить, если пользователь Salesforce уже одобрил доступ при переходе через веб-сервер OAuth поток, как документированные на OAuth 2.0 Web Server Authentication Flow. Мое рассуждение для этого состоит в том, что я не хочу, чтобы появлялись подсказки для входа или согласия, чтобы я мог отклонить доступ, если они еще не были одобрены.

Как только страница обратного вызова ударил, я всегда получать параметр error=immediate_unsuccessful, даже если пользователь одобрил заявку до и вошел.

Я попытался проверить это с помощью настраиваемой Google OAuth 2 Playground и установка немедленного = true или немедленное = false до конца конечной точки авторизации. Вкл. = False, отображается приглашение согласия, после чего вы можете предоставить доступ. On = true, это возвращает ту же ошибку, что и ранее.

Установленное приложение Connected имеет api и refresh_token в качестве доступных областей, пользователи могут авторизоваться, и нет установленных ограничений на IP. Идентификатор клиента и секрет этого приложения затем передаются на площадку OAuth 2.

Ниже приведен краткий пример того, как мое надлежащее приложение перенаправляется на URL-адрес auth с помощью Java и клиентской библиотеки Google OAuth. Мы изначально авторизовать клиента без немедленного и затем позже вызвать тот же самый код с немедленным = истина (как показано в примере)

AuthorizationCodeFlow authorizationCodeFlow = new AuthorizationCodeFlow.Builder(BearerToken.authorizationHeaderAccessMethod(), 
      httpTransport, 
      GsonFactory.getDefaultInstance(), 
      new GenericUrl("https://login.salesforce.com/services/oauth2/token"), 
      new ClientParametersAuthentication(CLIENT_ID, CLIENT_SECRET), 
      CLIENT_ID, 
      "https://login.salesforce.com/services/oauth2/authorize") 
      .setCredentialDataStore(StoredCredential.getDefaultDataStore(MemoryDataStoreFactory.getDefaultInstance())) 
      .build(); 

    AuthorizationCodeRequestUrl authUrl = authorizationCodeFlow.newAuthorizationUrl() 
     .setRedirectUri("https://72hrn138.ngrok.io/oauth/callback") 
     .setScopes(ImmutableSet.<String> of("api", "refresh_token")) 
     .set("prompt", "consent") 
     .set("immediate", "true"); 

    response.redirect(authUrl); 

вопрос (ы)

  • Существуют ли какие-либо настройки, которые я, возможно, пропустил в Salesforce, который бы облегчил ошибку?
  • Есть ли другой вариант в спецификации OAuth 2, который должен быть установлен для немедленной работы?
  • Выполняется ли немедленная настройка?

ответ

0

Мне удалось решить эту проблему в конце. Чтобы разрешить работу immediate=true, области действия необходимо удалить из запроса. В приведенном примере вы бы изменить authUrl к следующим:

AuthorizationCodeRequestUrl authUrl = authorizationCodeFlow.newAuthorizationUrl() 
    .setRedirectUri("https://72hrn138.ngrok.io/oauth/callback") 
    .set("prompt", "consent") 
    .set("immediate", "true"); 

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

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