2

这是一个使用omniauth-salesforce 的红宝石问题。我有omniauth 1.1.1 和omniauth-salesforce 1.0.3,我可以获得用户身份验证。但是,默认情况下不返回 refresh_token。我只得到access_token。我的回调 URL 是 http://localhost:3000/auth/salesforce/callback

根据“在Force.com上深入挖掘OAuth2.0”的描述,https ://login.salesforce.com/services/oauth2/authorize的默认范围是id api refresh_token。但这种情况并非如此。

然后我尝试在omniauth.rb中指定范围参数

提供者:salesforce、salesforce_client_id、client_secret、{:scope => "id api refresh_token"}

然后我收到一条错误消息:不允许请求的范围

此外,如果我尝试将以下内容放在浏览器上,我会收到相同的错误消息

https://login.salesforce.com/services/oauth2/authorize?response_type=code&client_id=3MVG9rFJvQRVOvk4RuIKaSYwf07LcsMtIAUK7h3Q6n5OHfD.IbFpEsROli3SqxWo67RklJ5FBdnYf4ejHNFrq&redirect_uri=http%3A%2F%2Flocalhost%3A3000%2Fauth%2Fsalesforce%2Fcallback&display=page&scope=api

任何帮助将不胜感激。

谢谢,

4

1 回答 1

8

您在omniauth.rbprovider声明中设置范围是正确的。但是,在 salesforce.com 发出之前refresh_token,必须将应用程序配置为支持此 OAuth 范围。

  1. 在 salesforce.com 上,导航到您的应用程序的配置位置。(设置 > 创建 > 应用程序)
  2. 在 Connected Apps 下,单击您的应用程序名称以查看其设置,然后单击 Edit。
  3. 在选定的 OAuth 范围下,确保选中“随时代表您执行请求”。即使您已经选择了“完全访问”,您也必须包含此内容。
  4. 保存,然后再次尝试您的 OAuth 流程。更新需要一段时间才能传播。

在您的回调控制器操作中,refresh_token现在将在request.env["omniauth.auth"].credentials.refresh_token.

于 2013-03-20T02:50:13.130 回答