问题:

我想使用ID令牌(UserInfo)中的信息为我的(应用程序)客户端服务器登录或创建用户.我不确定解决这个问题的标准方法,因为我是OAuth和OIDC的新手.我的问题在于为我的用户创建会话令牌以访问受客户端服务器保护的路由的标准流程.

我已经成功地使用我的Gmail登录,其中包括我的Google访问令牌和OIDC ID令牌.我还使用Django建立了一个PostgreSQL数据库和用户模型.我还根据我的ID令牌信息验证或创建了一个用户.

我可以使用数据(邮箱、SUB等)在客户端数据库中验证/创建用户,但创建会话令牌以访问客户端服务器端点的标准方法是什么?如果我创建一个完全独立的客户端服务器会话令牌,我是否使用ID令牌中的任何信息?

使用此视频和Django快速入门教程进行Django集成.

https://www.youtube.com/watch?v=996OiexHze0

https://github.com/auth0-samples/auth0-django-web-app/tree/master

推荐答案

OpenID Connect没有说明如何维护依赖方(您的服务器)和最终用户之间的会话.这取决于你.您可以发布一个会话cookie,或者您可以发布一个不透明的令牌,或者您可以使用JWT的无状态方法.OIDC只是让您信任另一个实体(IdP),告诉您用户已成功通过身份验证,并向您提供有关该用户的一些基本配置文件信息.之后会发生什么,完全由你来决定.

但是,既然您提到您的应用程序是一个Django服务器,我建议您使用一个仅限HTTP的安全同站点Cookie来存储会话ID,然后将与该会话对应的信息存储在某个服务器端存储中(内存中、SQL、Redis中).等,具体取决于您的要求).这样,不会向客户端公开任何信息,这对安全性非常有利,而且您还可以省go 客户端会话状态管理的开销.

Django相关问答推荐

在保存新实例之前删除一个实例(Django模型保存方法)

在Django中使用Generil.ListView类时,分页不起作用

Django ORM多表一对多关系问题

如何删除Docker上的django应用程序?

Django Form标签和action属性

如何保护单个数据库行/模型实例?

Django allauth 社交帐户注册中邮箱的模板变量

Django如何在没有ctrl点击的情况下允许多选

如何在 createsuperuser 中实例化表

未为部署的 django rest 框架加载静态文件

AttributeError:'Manager'对象在Django中没有属性'get_by_natural_key'错误?

如何在 Django 视图中获取 URL 参数?

如何在 django 中处理这种竞争条件?

使用 lambda 作为属性的默认值时,Django 1.7.1 Makemigrations 失败

测试 Django 信号的正确方法

对 django 的 Http Delete 请求返回 301

Django 和 VirtualEnv 开发/部署最佳实践

如何在不发送信号的情况下保存模型?

django过滤器超过几天?

如何使用查询参数构造 Django 反向/url?