当前位置:首页 > 后端开发 > OAuth2.0(基于django2.1.2实现版本)

OAuth2.0(基于django2.1.2实现版本)

7个月前 (05-26)41

基于python3.7

0),
你要先对OAuth2.0有一定的了解,建议先读一下阮一峰的oauth2.0文章,直接看“授权码模式”即可,带着疑问再来读本文效果更好。
http://www.ruanyifeng.com/blog/2014/05/oauth_2_0.html

1),
安装python3.7
安装虚拟环境virtualenv
pip install virtualenv

在磁盘上新建一个虚拟环境目录,所谓虚拟环境,就是创建一个集成python的文件夹,例如,
mkdir oauth2 (本例在E盘根目录下创建一个oauth2的项目目录)
cd oauth2 (进入到oauth2目录)
mkdir env (在oauth2目录中创建一个虚拟环境,名称为env)
cd env (进入到env目录)
cd Scripts (进入到env目录的Scripts文件夹下)
activate (在当前目录下执行'activate'命令,开启虚拟python3.7环境)

执行完以上步骤后,命令行出现提示符(大致)如下:
(env) E:\oauth2\env\Scripts> (命令行最前面出现"(env)"字符说明已经在虚拟环境中了)
接下来切换到oauth2目录,按照步骤2开始安装依赖包
(env) E:\oauth2>


2),
pip安装依赖:
(env) E:\oauth2> pip install django==2.1.2
(env) E:\oauth2> pip install requests==2.19.1
(env) E:\oauth2> pip install pymysql==0.9.2

安装完毕后,查看所有依赖包(安装上面三个包时,会自动安装包的依赖),
(env) E:\oauth2> pip freeze
asn1crypto==0.24.0
certifi==2018.10.15
cffi==1.11.5
chardet==3.0.4
cryptography==2.3.1
Django==2.1.2
idna==2.7
pycparser==2.19
PyMySQL==0.9.2
pytz==2018.5
requests==2.19.1
six==1.11.0
urllib3==1.23

3),
创建django项目,
分别创建Oauth2.0的客户端(client)和服务端(auther,本例验证服务和资源服务器都在auther上)
建议打开两个命令行界面,都进入到虚拟环境的"(env) E:\oauth2>"目录下,

client端:
(env) E:\oauth2> django-admin startproject client
(env) E:\oauth2> cd client
(env) E:\oauth2\client> python manage.py startapp oauthClient


auther端:
(env) E:\oauth2> django-admin startproject auther
(env) E:\oauth2> cd auther
(env) E:\oauth2\auther> python manage.py startapp oauthServer

4),
修改client基本配置,
用编辑器打开:E:\oauth2\client\client\settings.py文件,修改
1,ALLOWED_HOSTS = ['192.168.10.18'] (添加允许访问的IP地址,我的本地IP地址为192.168.10.18)

2,INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'oauthClient', (这里添加'oauthClient')
]

3,TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(BASE_DIR, 'templates')], (此处意思是设置client的模板目录'E:\oauth2\client\templates')
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]

4,DATABASES = {
# 删除或者注释掉原来的数据库引擎
# 'default': {
# 'ENGINE': 'django.db.backends.sqlite3',
# 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
# }

# 设置数据库的新引擎为mysql引擎
'default': {
'ENGINE': 'django.db.backends.mysql', #设置数据库的引擎为mysql引擎
'NAME': 'dj_client', #数据库名称为dj_client
'USER': 'root', #数据库用户名为root
'PASSWORD': '123', #数据库密码为123
'HOST': '192.168.10.18', #数据库地址为
'PORT': '3306', #数据库端口号是3306
}
}

5,设置时区为中国上海
LANGUAGE_CODE = 'zh-hans'
TIME_ZONE = 'Asia/Shanghai'

6,
django的默认数据库引擎是sqlite3,上面第4步骤修改了数据库引擎,但想要使用django的ORM操作机制,还需要修改E:\oauth2\client\client\__init__.py文件
在文件中添加:
import pymysql
pymysql.install_as_MySQLdb()

5),
修改auther基本配置,
用编辑器打开:E:\oauth2\auther\auther\settings.py文件,修改
1,ALLOWED_HOSTS = ['192.168.10.18'] (添加允许访问的IP地址,我的本地IP地址为192.168.10.18)

2,INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'oauthServer', (这里添加'oauthServer')
]

3,TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(BASE_DIR, 'templates')], (此处意思是设置client的模板目录'E:\oauth2\auther\templates')
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]

4,DATABASES = {
# 删除或者注释掉原来的数据库引擎
# 'default': {
# 'ENGINE': 'django.db.backends.sqlite3',
# 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
# }

# 设置数据库的新引擎为mysql引擎
'default': {
'ENGINE': 'django.db.backends.mysql', #设置数据库的引擎为mysql引擎
'NAME': 'dj_auther', #数据库名称为dj_auther
'USER': 'root', #数据库用户名为root
'PASSWORD': '123', #数据库密码为123
'HOST': '192.168.10.18', #数据库地址为
'PORT': '3306', #数据库端口号是3306
}
}

5,设置时区为中国上海
LANGUAGE_CODE = 'zh-hans'
TIME_ZONE = 'Asia/Shanghai'

6,
django的默认数据库引擎是sqlite3,上面第4步骤修改了数据库引擎,但想要使用django的ORM操作机制,还需要修改E:\oauth2\auther\auther\__init__.py文件
在文件中添加:
import pymysql
pymysql.install_as_MySQLdb()

6),
到此处配置工作已经完毕,接下来需要做以下动作:
1,必须手动创建dj_client和dj_auther两个数据库,然后如下操作

2,client端,
(env) E:\oauth2\client> python manage.py makemigrations #生成配置文件
(env) E:\oauth2\client> python manage.py migrate #根据配置文件创建数据库相关

3,auther端,
(env) E:\oauth2\auther> python manage.py makemigrations #生成配置文件
(env) E:\oauth2\auther> python manage.py migrate #根据配置文件创建数据库相关

3,运行client端
(env) E:\oauth2\client> python manage.py runserver 192.168.10.18:8001

4,运行auther端
(env) E:\oauth2\auther> python manage.py runserver 192.168.10.18:8002

7),
剩下请参照代码部分,client代码和auther代码。

 

源码github地址:

https://github.com/whisper540/OAuth2.0_Django2.1.2

作者:puppeteers
来源链接:https://www.cnblogs.com/sdorm/p/9842267.html

标签: OAuth2

“OAuth2.0(基于django2.1.2实现版本)” 的相关文章

OAuth2.0介绍

OAuth2.0介绍 OAuth2.0简介 四种许可类型 2.1. 授权码许可(Authorization Code) 2.2. 隐式许可(Implicit) 2...

关于OAuth2 Scope的理解

关于OAuth2 Scope的理解

按照官网的解释,Scope是资源拥有者(服务端)用来授予客户端特定权限的一个参数。换句话说,Scope是服务端规定好的,不同的客户端可以申请不同权限的名称。例如服务端规定了客户...

Secure REST API with oauth2 (翻译)

http://blog.csdn.net/haiyan_qi/article/details/52384734 **********************************...

OAuth2.0 入门与进阶

OAuth2.0 入门与进阶

 一、基础知识 1、OAuth产生背景   很多网站、APP 弱化甚至没有搭建自己的账号体系,而是直接使用社会化登录的方式,这样不仅免去了用户...

OAuth2认证和jwt机制

OAuth2认证和jwt机制

一、OAuth2认证 OAuth2是一个关于授权的开放标准,核心思路是通过各类认证手段(具体什么手段OAuth2不关心)认证用户身份,并颁发token(令牌),使得第三方应用可以使...

OAuth2.0 四种授权模式

OAuth2.0简单笔记(四种授权模式) 金天:坚持写东西,不是一件容易的事,换句话说其实坚持本身都不是一件容易的事。如果学习有捷径,那就是不断实践,不断积累。写笔记,其实是给自己看的,...

Spring Security 与 OAuth2(完整案例)

Spring Security 与 OAuth2(完整案例)

案例简述 简述: 允许内存、数据库、JWT等方式存储令牌 允许 JWT 方式验证令牌 允许从内存、数据库中读取客户端详情...

Spring Security OAuth2 Demo —— 密码模式(Password)

Spring Security OAuth2 Demo —— 密码模式(Password)

前情回顾 前几节分享了OAuth2的流程与授权码模式和隐式授权模式两种的Demo,我们了解到授权码模式是OAuth2四种模式流程最复杂模式,复杂程度由大至小:授权码模式 >...

ASP.NET没有魔法——ASP.NET MVC使用Oauth2.0实现身份验证

ASP.NET没有魔法——ASP.NET MVC使用Oauth2.0实现身份验证

  随着软件的不断发展,出现了更多的身份验证使用场景,除了典型的服务器与客户端之间的身份验证外还有,如服务与服务之间的(如微服务架构)、服务器与多种客户端的(如PC、移动、Web等),甚...