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至少工作的方式,因此用户不必向开发人员提供用户名和密码,也不需要在生产计算机上存储用户名和密码。)那么我们如何才能实现这一点?或者文档是完全错误的,我确实需要用户的登录/密码来访问数据,即使这一行没有说明。
答案 0 :(得分:6)
好的,这很烦人。在OAuth2中,无论用户是否访问所有数据以及该用户是否已登录的应用程序的正确方法是在Salesforce上不存在的grant_type = client_credentials。
解决方法如下
https://localhost/oauth
(这是一个黑客攻击,我们稍后会利用此优势)注意:YOURCODE中有一些%3D
....你不需要修改它们并将它们转换为=
,你可以保持原样。
现在返回可以使用的刷新令牌和可以使用的当前访问令牌。
现在,只需将刷新令牌保存到您的数据库中(我希望它能持续下去,直到有人删除应用程序并且时间会告诉我猜测。)
答案 1 :(得分:0)
您可以使用常规交互式OAuth登录流来获取刷新令牌,该令牌可用于根据需要获取新的访问令牌。有关详细信息,请参阅https://wiki.developerforce.com/page/Digging_Deeper_into_OAuth_2.0_on_Force.com。