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

Dea*_*ler 3 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
Run Code Online (Sandbox Code Playgroud)

当access_token保持过期时,我必须重新生成它.如果没有,我的同事可以只生成一次令牌并将其交给我并完成它.

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

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

Dea*_*ler 6

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

解决方法如下

  1. 在GUI中,编辑您的应用并在"API(启用OAuth设置)"中,添加"代表您随时访问和管理您的数据(api)或完全访问和执行请求(刷新令牌)"
  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并再次运行之前使用ONCE.
  5. 使用步骤4(YOURCODE)中的代码运行POST请求,以使用grant_type = authorization_code和code = YOURCODE&client_id = YOURCLIENTID&client_secret = YOURSECRET&redirect_uri = https%的正文中的数据来https://login.salesforce.com/services/oauth2/token 3A%2F%2Flocalhost%2Foauth

注意:%3DYOURCODE中有一些s ....你不需要修改它们并将它们转换成=你可以保持原样.

现在,这会导致返回您可以使用的刷新令牌以及您可以使用的当前访问令牌.

现在,只需将刷新令牌保存到您的数据库(我希望它几乎持续到有人删除应用程序,时间会告诉我猜).


sup*_*ell 0

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