如何获得更永久的访问令牌

时间:2014-03-25 17:40:31

标签: salesforce

http://www.salesforce.com/us/developer/docs/api_rest/index_Left.htm#CSHID=quickstart_code.htm|StartTopic=Content%2Fquickstart_code.htm|SkinName=webhelp处的文件说

  

Salesforce使用身份验证来允许用户安全地访问数据,而无需显示用户名和密码凭据。

但据我所知,我可以运行以获取access_token的唯一命令是使用我的同事的用户名和密码,如此

curl -d "username=yyyyyyy" -d "password=xxxxxxx" -d "client_id=zzzzzz" -d "client_secret=dddddddddd" -v -d "grant_type=password" https://login.salesforce.com/services/oauth2/token

我必须重新生成,因为access_token会一直过期。如果它没有,我的同事可以只生成一次令牌并将其交给我并完成它。

我怎么能这样做,所以他永远不必给我他的用户名/密码和我的应用程序将继续工作和工作,直到他从salesforce删除该应用程序(这将有望使client_id和client_secret无效)。

(这就是大多数API至少工作的方式,因此用户不必向开发人员提供用户名和密码,也不需要在生产计算机上存储用户名和密码。)那么我们如何才能实现这一点?或者文档是完全错误的,我确实需要用户的登录/密码来访问数据,即使这一行没有说明。

2 个答案:

答案 0 :(得分:6)

好的,这很烦人。在OAuth2中,无论用户是否访问所有数据以及该用户是否已登录的应用程序的正确方法是在Salesforce上不存在的grant_type = client_credentials。

解决方法如下

  1. 在GUI中,编辑您的应用并在“API(启用OAuth设置)”中,添加“代表您随时访问和管理您的数据(api)或完全访问权限和执行请求”(刷新令牌)“< / LI>
  2. 在GUI中,将回调网址设置为https://localhost/oauth(这是一个黑客攻击,我们稍后会利用此优势)
  3. 现在,转到网址(用您的数据填写参数)https://login.salesforce.com/services/oauth2/authorize?response_type=code&client_id=YOURCLIENTID&redirect_uri=https%3A%2F%2Flocalhost%2Foauth
  4. 您的浏览器会将您重定向到https://localhost/oauth?code=YOURCODE注意:此代码只能在您需要重复步骤3并再次运行之前使用。
  5. 使用第4步(YOURCODE)中的代码运行POST请求,使用grant_type = authorization_code&amp; code = YOURCODE&amp; client_id = YOURCLIENTID&amp; client_secret = YOURSECRET&amp; redirect_uri = https %3A%2F%2Flocalhost%2Foauth
  6. 注意:YOURCODE中有一些%3D ....你不需要修改它们并将它们转换为=,你可以保持原样。

    现在返回可以使用的刷新令牌和可以使用的当前访问令牌。

    现在,只需将刷新令牌保存到您的数据库中(我希望它能持续下去,直到有人删除应用程序并且时间会告诉我猜测。)

答案 1 :(得分:0)

您可以使用常规交互式OAuth登录流来获取刷新令牌,该令牌可用于根据需要获取新的访问令牌。有关详细信息,请参阅https://wiki.developerforce.com/page/Digging_Deeper_into_OAuth_2.0_on_Force.com