永不过期Salesforce会话

时间:2018-04-03 10:24:15

标签: asp.net oauth salesforce

我在我的应用程序中集成了Salesforce OAuth。使用我们的应用程序帐户映射用户的Salesforce帐户后,我在DB中保存了访问令牌。当用户请求从他的Salesforce帐户获取数据时,我只使用该令牌来获取数据。可悲的是,令牌有到期时间(最多24小时)。令牌过期后,用户必须再次将salesforce帐户与我们的应用程序连接。

无论如何,无论如何都要让salesforce会话保持无限时间或其他任何方式以避免重复登录?

3 个答案:

答案 0 :(得分:3)

我认为您正在寻找的是刷新令牌流程。虽然您可以控制到期时间,但正如您所说,您无法通过某些限制。相反,您可以向您的组织发送可以为您获取新会话ID的请求。

示例:

POST /services/oauth2/token HTTP/1.1
Host: https://login.salesforce.com/ 
grant_type=refresh_token&client_id=3MVG9lKcPoNINVBIPJjdw1J9LLM82HnFVVX19KY1uA5mu0
QqEWhqKpoW3svG3XHrXDiCQjK1mdgAvhCscA9GE&client_secret=1955279925675241571
&refresh_token=***your token here*** 

请注意,如果您使用的是用户名密码OAuth身份验证流程,则不起作用。查看此开发文档,了解可用于刷新令牌的参数以及它可以返回的响应。 - https://developer.salesforce.com/docs/atlas.en-us.api_rest.meta/api_rest/intro_understanding_refresh_token_oauth.htm

答案 1 :(得分:0)

无法确保用户会话永不过期。但是,您可以将会话超时值设置为最多24小时。

enter image description here

答案 2 :(得分:0)

我同意Iojo。我实现了类似的要求,将令牌保存在数据库中,并将其重新用于多个API调用。

注意:就我而言-对于所有API标注-身份验证层由相同的中间件负责。另外,我正在使用用户名密码作为访问令牌,显然,我不能使用刷新令牌。

  

我为带有令牌的访问令牌所做的工作   保存在数据库中?

//Please create a re-usable method in the Rest handler to Retrieve Token
private string getToken(){
    If(Token created within Session Timeout Limit){
      //Use encrypted token given in the DB 
    }
    else{
     //reuse code to generate new token 
     //save the encrypted token in the DB for future use
    }
}

好处:

  1. 您只需要在给定的会话超时限制内一次生成令牌
  2. 如果salesforce中有多个API调用,请重复使用相同的内容