首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >django-ouath-社会工具包-auth

django-ouath-社会工具包-auth
EN

Stack Overflow用户
提问于 2017-10-23 23:23:03
回答 1查看 396关注 0票数 0

我正在尝试设置social-auth (python-social-auth),以便使用django-oauth-toolkit与另一个Django项目对话。

我希望Django项目A使用Django项目B中的OAuth2登录。Django项目A使用social-auth,项目B使用django-oauth-toolkit作为OAuth2提供者。

项目A可以成功地登录到其他OAuth2提供者,如谷歌,但当我试图使用我的定制后端登录时,会出现以下错误:

代码语言:javascript
复制
AuthStateMissing at /sso/complete/custom-backend/
Session value state missing.

自定义后端是如何在项目A中实现的:

代码语言:javascript
复制
class CustomBackend(BaseOAuth2):
    name = 'custom-backend'
    EXTRA_DATA = [
        ('profile', 'org')
    ]

    def authorization_url(self):
        return "%s/oauth2/authorize" % self.setting("URL")

    def access_token_url(self):
        return "%s/oauth2/token" % self.setting("URL")

    def user_data(self, access_token, *args, **kwargs):
        resp = requests.get("%s/me/" % self.setting("URL"), headers={
            'Authorization': "Bearer %s" % access_token
        })
        if resp.status_code != 200:
            raise Exception("Error while getting user details from auth source.")
        data = resp.json()

        return {
            'username': data['email'],
            'first_name': data['first_name'],
            'last_name': data['last_name'],
            'user_id': data['id'],
            'email': data['email']
        }

有一个名为SOCIAL_AUTH_CUSTOM_BACKEND_URL的设置,它等于项目B(用于测试的http://localhost:8001)的基本URL。

当项目B重定向到项目A时(引发错误时)的URL为:http://localhost:8000/sso/complete/custom-backend/?redirect_state=6kg4S1eitCMqTTzFGrm9uerG37UNkUPl&code=e64by72AkD2unMVVsGZCz0V2byuUyu&state=6kg4S1eitCMqTTzFGrm9uerG37UNkUPl

我会很感激的,谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-10-30 01:57:42

正如我所发现的,HTTP不是由同一主机上的端口分隔的。所以我让项目A( OAuth2客户机)运行在localhost:8000上,项目B( OAuth2服务器)运行在localhost:8001上。Django的sessionid Cookie在auth过程中被覆盖,这导致了这个错误。

解决方案是在另一个主机上运行OAuth2服务器(我刚刚在macOS上的/private/etc/hosts中输入了一个条目,如下所示:

代码语言:javascript
复制
127.0.0.1    id.localhost

并将SOCIAL_AUTH_CUSTOM_BACKEND_URL更新为http://id.localhost:8001

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46899905

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档