이전에이 질문을 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 사양에 있습니까?
- 즉시 설정이 작동합니까?