基于Django搭建Oauth2.0服务器

2,097 阅读3分钟
一. 使用工具
Django-oauth-toolkit

https://django-oauth-toolkit.readthedocs.io/en/latest/

二、使用步骤
1.安装必要的包
[Shell]
纯文本查看
复制代码
1
2
pip install django-oauth-toolkit
pip install django


2.创建项目,注册app
[Python]
纯文本查看
复制代码
1
2
3
4
INSTALLED_APPS = (
...
'oauth2_provider',
)


3.配置url
[Python]
纯文本查看
复制代码
1
2
3
4
urlpatterns = [
...
path('o/', include('oauth2_provider.urls', namespace='oauth2_provider')),
]


4. 迁移数据库
[Shell]
纯文本查看
复制代码
1
2
python manage.py migrate oauth2_provider
python manage.py migrate


5. 解决跨域的问题
[Shell]
纯文本查看
复制代码
1
pip install django-cors-middleware

settings中注册解决跨域的app
[Python]
纯文本查看
复制代码
1
2
3
4
5
INSTALLED_APPS = (
...
'oauth2_provider',
'corsheaders',
)

添加中间件
[Python]
纯文本查看
复制代码
01
02
03
04
05
06
07
08
09
10
MIDDLEWARE = [
'corsheaders.middleware.CorsMiddleware',
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

[Python]
纯文本查看
复制代码
1
CORS_ORIGIN_ALLOW_ALL = True


6.配置登陆模板,要加上一个联系上下文的{{next}}函数。
登陆模板呢,如果自己有login.html那在适当的位置加上这条语句。
如果没有,就用Django自带的就好。
从django的安装包里获取base.html文件,这是admin后台通用的模板文件,此地不赘述,copy,复制到你的app中的templates/registration/,其中registration需要手动创建,然后创建login.html文件。

[HTML]
纯文本查看
复制代码
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
{% extends "base.html" %}
{% block content %}
{% if form.errors %}
<p>Your username and password didn't match. Please try again.</p>
{% endif %}
{% if next %}
{% if user.is_authenticated %}
<p>Your account doesn't have access to this page. To proceed,
please login with an account that has access.</p>
{% else %}
<p>Please login to see this page.</p>
{% endif %}
{% endif %}
<form method="post" action="{% url 'login' %}">
{% csrf_token %}
<table>
<tr>
<td>{{ form.username.label_tag }}</td>
<td>{{ form.username }}</td>
</tr>
<tr>
<td>{{ form.password.label_tag }}</td>
<td>{{ form.password }}</td>
</tr>
</table>
<input type="submit" value="login">
<input type="hidden" name="next" value="{{ next }}">
</form>
{# Assumes you setup the password_reset view in your URLconf #}
<p><a href="{% url 'password_reset' %}">Lost password?</a></p>
{% endblock %}

7:配置contact访问路径
在urls.py文件中,增加一条:
[Python]
纯文本查看
复制代码
1
2
3
4
urlpatterns = [
path('accounts/', include('django.contrib.auth.urls')),
.....
]

8.启动django服务器,并访问链接:http:// localhost:8000/o/applications /这时候回弹出对话框,提示你登陆,输入用户名密码登陆(需要自己在django后台创建用户,不赘述,不懂留言,有留必回)登陆成功之后,就打开了创建app的界面。填入信息,保存即可。Redirect Uris填写:http://django-oauth-toolkit.herokuapp.com/consumer/exchange/这个链接是处理接收到的信息,比如接收到了code等信息,再通过post的方式提交给http://127.0.0.1:8000/o/token/提交之后返回授权的token.
9.
请求APP授权
http://django-oauth-toolkit.herokuapp.com/consumer/

打开链接,输入你的client——id,授权地址,点击访问:



提交


看到提示信息,你提交的信息都在这里。


确认登陆?

点击Authorize,授权,就跳转到了创建app的时候,您填写的回调地址了。


从图片中我们看到,我们已经拿到授权的code了。


继续提交,看到token