Py学习  »  问与答

关于用django如何做oauth验证

kxx1309 • 8 年前 • 6151 次点击  

最近刚刚过了一遍django的新手教程,想试试看从一个网站的api中获取一些信息。 想实现的功能是当该网站的用户登陆成功后,用oauth让用户授权app并获取该用户的部分信息。

网上找了不少资料,每个人的代码都不一样,django oauth toolkit的官方文档也不是很理解。

现在处于oauth原理理解,但不知道如何下手的情况,以前用flask跟着视频教程一部部走下来会写google sign in的授权,但对于django, 看到一大堆代码都没什么解释头非常大。

不知道大家有没有什么好的教程可以推荐,本人比较笨,一步步来才能理解,还是说应该回去把django剩下的官方文档全部过一遍?

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/1252
 
6151 次点击  
文章 [ 9 ]  |  最新文章 8 年前
正小歪
Reply   •   1 楼
正小歪    8 年前

先去 了解一下oauth2, 原理。 然后就去开发者文档里找接口,
所有的oauth2 都是差不多的。

mugbya
Reply   •   2 楼
mugbya    8 年前

@kxx1309

... 形式如下:

          <a href="https://github.com/login/oauth/authorize?client_id=dd90d6225d6bb60bf7a5&redirect_uri=http://127.0.0.1:8000/oauth/github&state={{state}}" title="GitHub 登录">

          </a>

模板中是不提供client_secret ,state 也是可选的

kxx1309
Reply   •   3 楼
kxx1309    8 年前

@mugbya 但是在template中以怎样的格式发送client_id, client_secret 这种数据给authorization server 呢?

mugbya
Reply   •   4 楼
mugbya    8 年前

@kxx1309 第一次请求是在模板中的链接,然后后续就用第三方库向authorization server获取信息。

博主用的是urllib,我自己改了下,用的requests跟authorization server 互动

你说的那个我没用的

kxx1309
Reply   •   5 楼
kxx1309    8 年前

查了老半天都不知道怎么向authorization server 发送请求,是不是要用到django-oauth2-provider?好复杂。。。能加微信详细询问吗?

mugbya
Reply   •   6 楼
mugbya    8 年前

@kxx1309

  1. 新增的函数全部在 get_redirect_url 中进行调用了...仔细看。 你说不是问题

2.对的

3.redirect_uri 不是随便写的,这个oauth 有详细说明的

4."待用户点击授权后,正式运行这个class里的method并重定向到应用主页。" 我觉得这个说法有待商榷,授权的时候就已经进类里面执行了方法了。

这个基本写的蛮清楚的,我就是看的这个才窥见一斑。 如果有问题还是说说具体的吧

kxx1309
Reply   •   7 楼
kxx1309    8 年前

@mugbya 我看完了这个教程,但是我还是不是很理解。

1 他是用redirect view完成的,原先这个class-based view method的使用顺序是dispatch(), http_method_not_allowed(),get_redirect_uri(), 那新添加进去的两个function和原来三个function会如何排序?

2 向authorization server发送请求这一块内容是不是写在template里面(比如login.html)?

3 redirect_uri是不是随便写?因为我之前用flask写的一个小应用,按照教程走,授权后重定向的url并不是之前就设定好的,而是直接在redirect函数里直接写明了要跳转的url。

4 最后我想整理下我阅读完那篇文章后的大概思路,但还有些不懂,希望能指正其中的不对。 1)首先在一个template中构建这个第三方登陆按钮(假设是login.html),这个button是链接到http://github.com/login/oauth/authorize, 同时得提供client_id, client_secret, scope(optional), redirect_uri(optional)。 2)点击这个按钮后,向authorization server发送请求,并且开始调用GithubOauthView,待用户点击授权后,正式运行这个class里的method并重定向到应用主页。

(对于具体实现的步骤先后还是有些模糊,希望能有大神指点一二,感激不尽)

kxx1309
Reply   •   8 楼
kxx1309    8 年前

非常感谢你的帮助!!!

mugbya
Reply   •   9 楼
mugbya    8 年前

我之前做这个也搜集了一堆资料,现在分享下.

主要看的这个教程:第三方账号登录 (这个是根据原理一步步来的,没用oauth的集成模块)

因为你oauth原理都理解,所以那些基础都不贴了。