首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Snapchat的PKCE参数

Snapchat的PKCE参数
EN

Stack Overflow用户
提问于 2020-12-17 22:36:06
回答 1查看 100关注 0票数 1

我试图为Snapchat编写一个django-allauth提供程序,但我遇到了一个障碍。

Snapchat需要PKCE参数。我首先更改了AUTH_PARAMS。

代码语言:javascript
复制
'AUTH_PARAMS': {
            'code_challenge': 'state',
            'code_challenge_method': "S256"
        }

这只会导致在我收到代码响应后,Snapchat API对Access_Token请求的响应无效。

这个错误是我得到的第一个错误。

代码语言:javascript
复制
{'error': 'invalid_request', 'error_description': 'Invalid code_verifier length.', 'state': ''}

在覆盖SocialLogin.stash_state之后,我收到这个错误。

代码语言:javascript
复制
{'error': 'invalid_grant', 'error_description': 'Invalid code_verifier.', 'state': ''}

从我可以挖掘的所有身份验证的代码中,我在代码库中找不到任何关于base64参数或PKCE Url SHA256编码的东西。

我愿意实现这个解决方案,但是我被困在寻找状态参数的子类化位置,然后再匹配它们。

Snapchat文档也存在一些问题。

https://gist.github.com/CisarJosh/733bb76a13f36f0a7944f05d257bb3f6

这是我的一些尝试的要点。

EN

回答 1

Stack Overflow用户

发布于 2020-12-17 23:50:47

我想这将会让你开始:

代码语言:javascript
复制
from allauth.socialaccount.providers.oauth2.provider import OAuth2Provider
import secrets
import base64
import hashlib
import urllib.parse

VOCAB = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ-._~0123456789"


def generate_code_verifier() -> str:
    length = max(43, secrets.randbelow(129))
    return "".join([secrets.choice(VOCAB) for i in range(0, length)])


def generate_state() -> str:
    return secrets.token_urlsafe(32)


class SnapchatProvider(OAuth2Provider):
    def get_auth_params(self, request, action):
        params = super().get_auth_params(request, action)
        code_verifier = generate_code_verifier()
        state = generate_state()
        # store this state token somewhere so it can be looked up
        challenge = hashlib.sha256(code_verifier).digest()
        encoded = base64.b64encode(challenge)
        urlencoded = urllib.parse.quote_plus(encoded)
        params.update(state=state, code_challenge=urlencoded)
        
        return params

这就是我对该部分规范的解释。

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

https://stackoverflow.com/questions/65342725

复制
相关文章

相似问题

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