通过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 ...
随机推荐
- C# SqlBulkCopy 避免插入重复数据(不重复即插入)
之前写过一篇 C# SqlBulkCopy 大量数据导入到数据库 的文章介绍了大量数据导入到数据库的高效方法. 这篇文章与之有些关联,在这之前所想的是做全量插入,每次run这个job就会清空然后插入, ...
- Web安全常见问题及解决方法
关于Web安全,我们最早听到最多的就是SQL注入.例如用户在系统登录界面输入用户名和密码,提交以后,后端直接拿到数据就拼接SQL语句去查询数据库.如果在输入时进行了恶意的SQL拼装,那么最后生成的SQ ...
- [题解] LuoguP3784 [SDOI2017]遗忘的集合
要mtt的题都是...... 多补了几项就被卡了一整页......果然还是太菜了...... 不说了......来看100分的做法吧...... 如果做过付公主的背包,前面几步应该不难想,所以我们再来 ...
- 吴裕雄 Bootstrap 前端框架开发——Bootstrap 字体图标(Glyphicons):glyphicon glyphicon-align-justify
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name ...
- linux项目,项目报错,排查
今天在遇到以前部署的项目突然没有数据了,然后就去服务器看了一下,打印日志发现报错了,现在我是一脸懵逼,因为不知道怎么排查 然后同事告诉说先看报错的原因,然后再去找认识的类,我打码的都是一些认识的 然后 ...
- (排序EX)P1093 奖学金
题解: #include<iostream>using namespace std;int r=0;void swap(int &a,int &b){ int t=a; ...
- ContentProvider ContentResolver ContentObserver 内容:提供、访问、监听
内容提供 public class PersonContentProvider extends ContentProvider{ private static final String AUTHORI ...
- Django ORM多表查询练习
ORM多表查询 创建表结构: from django.db import models # 创建表结构 # Create your models here. class Class_grade(mod ...
- Essay写作“短路”怎么办?
有些留学生在完成essay写作过程中可能会短路,写着写着不知道自己在写什么,或者是直接动不了笔了,这种情况下应该怎么办呢?下面Australiaway小编就跟同学们分享一些比较有用的方法,希望可以帮到 ...
- SVM手撕公式
卓越源于坚持,努力须有方向. 如上图所示,有一堆训练数据的正负样本,标记为:,假设有一个超平面H:,可以把这些样本正确无误地分割开来,同时存在两个平行于H的超平面H1和H2: 使离H最近的正负样本刚好 ...