文档章节

通过OAuth2.0 获取授权访问SF 用户数据

在山的那边
 在山的那边
发布于 2019/12/07 21:59
字数 740
阅读 28
收藏 0

通过OAuth2.0 获取授权访问SF 用户数据

OAuth2.0 相关知识

深入了解 Salesforce 中的 OAuth 2.0(SF官方)

OAuth 2.0 的一个简单解释(阮一峰大神)

OAuth 2.0 的四种方式(阮一峰大神)

GitHub OAuth 第三方登录示例教程(阮一峰大神)

创建应用程序

  1. 新建应用程序

访问示例(Python+django)

  1. 环境准备:

  2. index.html 两种方式:

    • 方式一:采用由用户授权,调用者无需知道SF的用户名与密码
    • 方式二:直接通过用户名密码获取授权
    方式一:需要用户授权<br/>
    <a href="https://login.salesforce.com/services/oauth2/authorize?response_type=code&client_id=xxxx&redirect_uri=http://localhost:8000/sfapp/callBack&state=userAuthor&prompt=consent">获取Code</a><br/><br/>
    
    方式二:使用密码方式<br/>
    <a href="/sfapp/pwdOAuth">Username-Password OAuth</a><br/><br/>
    
    方式三:刷新<br/>
    <a href="/sfapp/refreshToken">refreshToken</a><br/><br/>
    

方式一:需要用户授权

  • 当用户,点击“获取Code” 时,先弹出SF 登录,然后弹出是否允许访问,当允许后,SF 回调将code放在回调URL后 http://localhost:8000/xxx?code=xxxxxxxxxxxxx

  • 然后用Code 再调用SF 授权接口,换取Access Token

  • 有了Access Token,调用查询接口,查询客户

  • 该方式常用于一些SF工具,需要访问Org数据

  • 返回数据结构如下:

  • 有了access_token 就能访问SF 数据(前提在创建App时给了授权)

  • 代码示例

def callBack(request):
    #1 获取Code,从GET 请求中取code
    code = request.GET['code']
    # 自定义标识字段,SF 按原样返回
    state = request.GET['state']
    # 方式1:先用户授权,取的code 再通过Code 获取 access_token
    head = {
        'code':code,
        'grant_type':'authorization_code',
        'client_id':'',
        'redirect_uri':'http://localhost:8000/sfapp/callBack',
        'client_secret':''
    }
    r = requests.post('https://login.salesforce.com/services/oauth2/token', data=head)
    request.session['sfInfo'] = r.json()
    return  render(request, 'sfapp/callBack.html', {'result': request.session['sfInfo']})
    
def getAccountList(request):
    url = request.session.get('sfInfo').get('instance_url')+ '/services/data/v44.0/query/?q=SELECT name,Id from Account'
    auth = {'Authorization': 'Bearer %s'%(request.session.get('sfInfo').get('access_token'))}
    r = requests.get(url, headers = auth)
    result = r.json()
    records = result['records']
    return render(request, 'sfapp/accountList.html', {'records': records})

方式二:通过用户名与密码授权

  • 该方式只需要调用一次,通过用户名与密码换取Access Token
  • 该方式常用于系统api集成
def pwdOAuth(request):
    head = {
            'grant_type': 'password',
            'client_id': '',
            'redirect_uri': 'http://localhost:8000/sfapp/callBack',
            'client_secret': '',
            'username':'',
            'password':''
        }
    url = 'https://login.salesforce.com/services/oauth2/token'
    r = requests.post(url, data=head)
    result = r.json()
    request.session['sfInfo'] = result
    return  render(request, 'sfapp/callBack.html', {'result': request.session['sfInfo']})

Refresh Token

  • 当授权过期后,通过refresh token 获取新的Access Token

  • 如果采用密码方式,无refresh token,在方式一中才有

  • 通过refresh token 获取新的Access Token的返回时无,refresh token

def refreshToken(request):
    rt = request.session.get('sfInfo').get('refresh_token')
    head = {
        'grant_type': 'refresh_token',
        'refresh_token':rt,
        'client_id': '',
        'redirect_uri': 'http://localhost:8000/sfapp/callBack',
        'client_secret': '',
        'format':'json'
    }
    url = 'https://login.salesforce.com/services/oauth2/token'
    r = requests.post(url, data=head)
    result = r.json()
    request.session['sfInfo'] = result
    return render(request, 'sfapp/callBack.html', {'result': result})

© 著作权归作者所有

在山的那边

在山的那边

粉丝 16
博文 67
码字总数 30054
作品 0
长宁
程序员
私信 提问
OAuth2.0---Oltu理解

OAuth2.0---Oltu 请求流程 Step1:获取Authorization Code,授权界面 granttype 授权类型authorizationcode redirect_uri 回调路径 scope 授权范围 state 客户端状态值 返回的授权auth_code...

-悟空-
2015/05/08
831
0
OAuth2.0认证流程是如何实现的?

导读 大家也许都有过这样的体验,我们登录一些不是特别常用的软件或网站的时候可以使用QQ、微信或者微博等账号进行授权登陆。例如我们登陆豆瓣网的时候,如果不想单独注册豆瓣网账号的话,就...

无敌码农
2019/05/06
0
0
大话Oauth2.0(一)从概念到实践

Oauth2.0本身: Oauth2.0是一种授权协议,当然也归属为安全协议的范畴,在实际执行的时候就是保护互联网中不断增长的大量WEB API的安全访问。OAuth2.0共包含四种角色,分别是资源所有者、第三...

新栋BOOK
2019/05/12
0
0
【OAuth2学习之路】Spring Security OAuth官网文档翻译

现将开发文档翻译出来,因为看英文实在是比较吃力的。 首先看下官方的指南Developers Guide,OAuth的两个版都都有。本文看的是OAuth2的开发指南。 翻译如下: Spring Security OAuth2开发指南...

666B
2014/09/09
3.5K
0
Oauth2.0与Oauth1.0的区别

1.Oauth2.0授权步骤:(通俗版) 先引导用户到授权服务器请求用户授权,获取授权码(Authorization Code),客户端通过授权码到授权服务器换取访问令牌(access token),用访问令牌去获取资...

hanzhankang
2014/02/10
1.8K
0

没有更多内容

加载失败,请刷新页面

加载更多

Kettle自定义jar包供javascript使用

我们都知道 Kettle 是用 Java 语言开发,并且可以在 JavaScript 里面直接调用 java 类方法。所以有些时候,我们可以自定义一些方法,来供 JavaScript 使用。 本篇文章有参考自:https://www...

CREATE_17
昨天
82
0
处理CSV文件中的逗号

我正在寻找有关如何处理正在创建的csv文件的建议,然后由我们的客户上传,并且该值可能带有逗号(例如公司名称)。 我们正在研究的一些想法是:带引号的标识符(值“,”值“,”等)或使用|...

javail
昨天
79
0
如何克隆一个Date对象?

将Date变量分配给另一个变量会将引用复制到同一实例。 这意味着更改一个将更改另一个。 如何实际克隆或复制Date实例? #1楼 简化版: Date.prototype.clone = function () { return new ...

技术盛宴
昨天
73
0
计算一个数的数位之和

计算一个数的数位之和 例如:128 :1+2+8 = 11 public int numSum(int num) { int sum = 0; do { sum += num % 10; } while ((num = num / 10) > 0); return sum;......

SongAlone
昨天
124
0
为什么图片反复压缩后普遍会变绿,而不是其他颜色?

作者:Lion Yang 链接:https://www.zhihu.com/question/29355920/answer/119088684 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 业余版概要:安卓的...

shzwork
昨天
71
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部