簡體   English   中英

Snapchat 的 PKCE 參數

[英]PKCE Parameters for Snapchat

我正在嘗試為 Snapchat 編寫django-allauth提供程序,但遇到了障礙。

Snapchat 需要PKCE參數。 我首先更改了 AUTH_PARAMS。

'AUTH_PARAMS': {
            'code_challenge': 'state',
            'code_challenge_method': "S256"
        }

在我收到代碼響應后,這只會導致 Snapchat API 對 Access_Token 請求的無效響應。

這個錯誤是我得到的第一個錯誤。

{'error': 'invalid_request', 'error_description': 'Invalid code_verifier length.', 'state': ''}

覆蓋 SocialLogin.stash_state 后,我收到此錯誤。

{'error': 'invalid_grant', 'error_description': 'Invalid code_verifier.', 'state': ''}

從我可以挖掘的所有身份驗證代碼中,我在 PKCE 參數或 base64 Url SHA256 編碼的代碼庫中找不到任何內容。

我願意實施該解決方案,但我無法找到將 state 參數子類化的位置,然后再匹配它們。

Snapchat Docs 也存在一些問題。

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

這是我的一些嘗試的要點。

我認為這會讓你開始:

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

這是我對該部分規范的解釋。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM