通过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 ...
随机推荐
- 【转载】RobotFramework的Setup或Teardowm中执行多个关键字
有时候需要在setup和teardowm中执行多个关键字 以前的做法就是重新封装一个keyword,然后调用,It’s OK 这里介绍另外一个方法,使用Run Keywords来实现 用法其实非常的简 ...
- ZOJ - 3635 Cinema in Akiba(树状数组+二分)
题意:已知有n个人,从第一个人开始每个人被安排在第ai个空座上,有m组询问,问某人所坐的位置. 分析: 1.用树状数组维护空座的个数,方法: 将所有的空座初始化为1,sum(x)则表示从座位1到座位x ...
- multi-layer perceptrons, MLP)模型,CvANN_MLP。
#include <opencv2/core/core.hpp> #include <opencv2/highgui/highgui.hpp> #include <ope ...
- StarUML 3.0.2安装激活
文章参考:https://blog.csdn.net/sam_shan/article/details/80585240 1.下载StarUML:http://staruml.io/,一直下一步安装. ...
- 将java项目转成svn项目
1.需要工具:eclipse / svn插件 2.在需要共享的项目上右键-->team-->Share Project分享项目 3.选择svn 如果需要共享成cvs选择cvs即可. 4.选 ...
- Arduino --structure
The elements of Arduino (C++) code. Sketch loop() setup() Control Structure break continue do...whil ...
- RMAN > BACKUP VALIDATE DATABASE ARCHIVELOG ALL
使用BACKUP ... VALIDATE 命令: You can use the BACKUP VALIDATE command to do the following: (1)Che ...
- 花了一周整理的,这是价值10W的32个Python项目!
今天为大家整理了32个Python爬虫项目.整理的原因是,爬虫入门简单快速,也非常适合新入门的小伙伴培养信心.所有链接指向GitHub,祝大家玩得愉快~QQSpider ! QQ空间爬虫,包括日志.说 ...
- C# 对CSV 读写
下面这篇博客只介绍了简单的 用“,”隔开的方式, 不是很推荐,但是对于符合的数据类型还是挺好的 https://www.cnblogs.com/Clin/archive/2013/03/14/2959 ...
- 吴裕雄--天生自然JAVA SPRING框架开发学习笔记:Spring Bean的配置及常用属性
作为 Spring 核心机制的依赖注入,改变了传统的编程习惯,对组件的实例化不再由应用程序完成,转而交由 Spring 容器完成,在需要时注入应用程序中,从而对组件之间依赖关系进行了解耦.这一切都离不 ...