2016-08-11 1 views
0

이전에이 질문을 Salesforce StackExchange으로 질문했습니다.이 질문은 주제를 벗어난 것으로 간주하여 여기에서 대답을 얻을 수 있는지 확인하는 것이 좋습니다.Salesforce OAuth에서 immediate = true를 사용합니다.


내가 OAuth 2.0 Web Server Authentication Flow에 설명 된대로 웹 서버의 OAuth 흐름을 통과 할 때 세일즈 포스 사용자가 이미 액세스를 승인 할 수 있는지 확인하는 즉시 매개 변수를 사용하려고 시도하고

배경입니다. 이에 대한 나의 추론은 로그인 또는 동의 프롬프트가 표시되지 않도록하여 승인되지 않은 경우 액세스를 거부 할 수 있다는 것입니다. 콜백 페이지가 히트되면

, 나는 항상 사용자가 이전에 응용 프로그램을 승인하고 로그인 한 경우에도 매개 변수 error=immediate_unsuccessful를 수신하고있다.

내가 통해이를 확인하려고 시도 가지고 Google OAuth 2 Playground 정의하고 즉각적인 설정 = true 또는 immediate = false를 인증 엔드 포인트의 끝에 추가하십시오. On = false이면 동의 확인 프롬프트가 표시되고 액세스 권한을 부여 할 수 있습니다. On = true이면 앞에서 설명한 것과 같은 오류가 반환됩니다.

설정되어있는 연결된 응용 프로그램은 사용 가능한 범위로 api 및 refresh_token을 가지므로 사용자가 스스로 권한을 부여 할 수 있으며 IP 제한이 설정되지 않습니다. 이 앱의 클라이언트 ID와 비밀번호는 OAuth 2 운동장으로 전달됩니다.

다음은 자바와 Google OAuth 클라이언트 라이브러리를 사용하여 적절한 애플리케이션을 인증 URL로 리디렉션하는 방법에 대한 간단한 예입니다. 우리는 처음에 즉각적인없이 클라이언트에 권한을 부여하고 나중에 (예에서와 같이) = true로 즉시

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"); 

나는 이론이 범위를 정의하는 것은 당신이 그 범위를 사용할 수있는 권한을 요청하기 때문에 이러한 권한에 대한 승인을 받아야하는 의미 믿습니다. 이는 사용자가 로그인해야하고 클라이언트 ID가 성공하도록 이미 승인되었음을 나타내는 즉시 옵션과 충돌합니다.

관련 문제