通过OAuth2.0 获取授权访问SF 用户数据
站长资讯:
创建应用程序
新建应用程序

访问示例(Python+django)
环境准备:

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})
通过OAuth2.0 获取授权访问SF 用户数据的更多相关文章
- Spring Security OAuth2.0认证授权五:用户信息扩展到jwt
历史文章 Spring Security OAuth2.0认证授权一:框架搭建和认证测试 Spring Security OAuth2.0认证授权二:搭建资源服务 Spring Security OA ...
- Spring Security OAuth2.0认证授权六:前后端分离下的登录授权
历史文章 Spring Security OAuth2.0认证授权一:框架搭建和认证测试 Spring Security OAuth2.0认证授权二:搭建资源服务 Spring Security OA ...
- ***微信公众平台开发: 获取用户基本信息+OAuth2.0网页授权
本文介绍如何获得微信公众平台关注用户的基本信息,包括昵称.头像.性别.国家.省份.城市.语言.本文的方法将囊括订阅号和服务号以及自定义菜单各种场景,无论是否有高级接口权限,都有办法来获得用户基本信息, ...
- C#微信公众号开发-高级接口-之网页授权oauth2.0获取用户基本信息(二)
C#微信公众号开发之网页授权oauth2.0获取用户基本信息(一) 中讲解了如果通过微信授权2.0snsapi_base获取已经关注用户的基本信息,然而很多情况下我们经常需要获取非关注用户的信息,方法 ...
- 微信公众平台开发—利用OAuth2.0获取微信用户基本信息
在借鉴前两篇获取微信用户基本信息的基础下,本人也总结整理了一些个人笔记:如何通过OAuth2.0获取微信用户信息 1.首先在某微信平台下配置OAuth2.0授权回调页面: 2.通过appid构造url ...
- 用Chrome查看微信访问需要OAuth2.0网页授权的页面
在PC浏览器打开某网站页面提示页面错误,是因为进行了OAuth2.0网页授权 有以下限制, 1.必须在微信打开 2.微信页面授权 其中第一步比较容易实现,修改下ua(user-agent),让其携带“ ...
- 微信公众平台开发(71)OAuth2.0网页授权
微信公众平台开发 OAuth2.0网页授权认证 网页授权获取用户基本信息 作者:方倍工作室 微信公众平台最近新推出微信认证,认证后可以获得高级接口权限,其中一个是OAuth2.0网页授权,很多朋友在使 ...
- Force.com微信开发系列(七)OAuth2.0网页授权
OAuth是一个开放协议,允许用户让第三方应用以安全且标准的方式获取该用户在某一网站上存储的私密资源(如用户个人信息.照片.视频.联系人列表),而无须将用户名和密码提供给第三方应用.本文将详细介绍OA ...
- 使用Owin中间件搭建OAuth2.0认证授权服务器
前言 这里主要总结下本人最近半个月关于搭建OAuth2.0服务器工作的经验.至于为何需要OAuth2.0.为何是Owin.什么是Owin等问题,不再赘述.我假定读者是使用Asp.Net,并需要搭建OA ...
随机推荐
- hdu 4300 Clairewd’s message 字符串哈希
Clairewd’s message Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Other ...
- Java JDK for Windows
目录 JDK简介下载安装配置JAVA_HOME和Path测试禁止Java自动更新(可选操作) JDK简介 JDK是Java语言的软件开发工具包,主要用于移动设备.嵌入式设备上的java应用程序.JDK ...
- 使用packstack安装pike版本的openstack
最近由于工作需要,需要调研安装pike版本的gnocchi.由于ceilometer与gnocchi版本的强相关性,所以需要部署一个同一版本的openstack环境,在同事的推荐下使用了packsta ...
- COGS 1489玩纸牌
%%%http://blog.csdn.net/clover_hxy/article/details/53171234 #include<bits/stdc++.h> #define LL ...
- TP多条件查询实例
where条件查询,时间范围查询 $condition = [ ['member_id', '=', $member_id] ]; if($type) { $condition[] = ['type' ...
- MVC三层架构在各框架中的特征
转一篇写得很棒的文章:https://my.oschina.net/win199176/blog/208171?p=7&temp=1495894148424 1.基于web开发中最原始的jsp ...
- LeetCode做题笔记之动态规划
LeetCode之动态规划 时间有限只做了下面这几道:70.338.877.96.120.95.647,后续会继续更新 70:爬楼梯 先来道简单的练练手,一道经典的动态规划题目 可以采用动态规划的备忘 ...
- 51nod1007:正整数分组 DP
1007 正整数分组 基准时间限制:1 秒 空间限制:131072 KB 分值: 10 难度:2级算法题 收藏 关注 将一堆正整数分为2组,要求2组的和相差最小. 例如:1 2 3 4 5,将1 ...
- 高性能集群软件keepalived
Keepalived介绍 以下是keepalive官网上的介绍.官方站点为http://www.keepalived.org. Keepalived is a routing sof ...
- NOI2019退役记
Day0 时光荏苒,日月如梭.人生中第二次也是最后一次全国赛开始了. 坐6h高铁+1h大巴来到gzez,热死.室友是A类的Gloid和C类的仓鼠,我寝室是为数不多(或许只有1个)的凑齐了ABC三种类别 ...