在Salesforce OAuth流中使用immediate=true

在Salesforce OAuth流中使用immediate=true,oauth,oauth-2.0,salesforce,authorization,Oauth,Oauth 2.0,Salesforce,Authorization,之前问过这个问题,他们认为是离题的,所以在这里问,看看我是否能得到答案 背景 我试图使用immediate参数检查Salesforce用户在通过Web服务器OAuth流时是否已经批准了访问权限,如上所述。我的理由是,我不希望出现登录或同意提示,这样,如果他们尚未批准,我可以拒绝访问 一旦点击回调页面,我总是会收到参数error=immediate\u unsuccessful,即使用户之前已经批准了应用程序并已登录 我已尝试通过自定义并将immediate=true或immediate=fal

之前问过这个问题,他们认为是离题的,所以在这里问,看看我是否能得到答案


背景 我试图使用immediate参数检查Salesforce用户在通过Web服务器OAuth流时是否已经批准了访问权限,如上所述。我的理由是,我不希望出现登录或同意提示,这样,如果他们尚未批准,我可以拒绝访问

一旦点击回调页面,我总是会收到参数
error=immediate\u unsuccessful
,即使用户之前已经批准了应用程序并已登录

我已尝试通过自定义并将immediate=true或immediate=false设置到授权端点的末尾来检查这一点。On=false时,将显示同意提示,然后您可以授予访问权限。On=true,返回与前面列出的相同错误

已设置的已连接应用程序的可用作用域为api和refresh_token,用户可以自行授权,并且没有设置ip限制。然后将此应用程序中的客户端id和密码传递到OAuth 2

下面是一个简单的示例,说明我的应用程序如何使用Java和GoogleOAuth客户端库重定向到AuthURL。我们最初在不使用immediate的情况下授权客户机,然后调用immediate=true的相同代码(如示例所示)

AuthorizationCodeFlow AuthorizationCodeFlow=新的AuthorizationCodeFlow.Builder(BearerToken.authorizationHeaderAccessMethod(),
httpTransport,
GsonFactory.getDefaultInstance(),
新的GenericUrl(“https://login.salesforce.com/services/oauth2/token"),
新客户端参数身份验证(客户端ID、客户端机密),
客户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(不可变设置(“api”、“刷新令牌”))
.set(“提示”、“同意”)
.set(“立即”、“真实”);
重定向(authUrl);
问题:
  • Salesforce中是否有我可能遗漏的可以减轻错误的设置
  • OAuth 2规范中是否有其他选项必须设置为立即选项才能工作
  • 即时设置有效吗

我最终设法解决了这个问题。要允许
immediate=true
选项工作,必须从请求中删除作用域。在提供的示例中,您需要将
authUrl
修改为以下内容:

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

我相信这个理论是,定义一个范围意味着您需要获得使用这些范围的权限,因此需要获得这些权限的批准。这与“立即”选项相冲突,该选项规定用户必须登录,并且客户端id已获得批准,才能成功登录。

我遇到了相同的问题-除了我没有任何范围开始,而且我仍然遇到
立即不成功的问题。
AuthorizationCodeRequestUrl authUrl = authorizationCodeFlow.newAuthorizationUrl()
    .setRedirectUri("https://72hrn138.ngrok.io/oauth/callback")
    .set("prompt", "consent")
    .set("immediate", "true");