将 Amazon Alexa grant_code 换成 access_token 时,凭据在哪里?

When exchanging the Amazon Alexa grant_code for an access_token, where are the credentials?

我正在尝试编写交换和访问端点,这里的文档 (https://developer.amazon.com/public/solutions/alexa/alexa-skills-kit/docs/linking-an-alexa-user-with-a-user-in-your-system#h2_login) 有两点不清楚:

  1. 交换访问令牌授权代码的调用是如何进行的 - 它是在 QS 中使用凭据获取还是在正文中使用 POST 凭据?

  2. 访问令牌是仅在 JSON 中为意向调用传送的,还是已正确设置为不记名令牌?

  1. 这是一个 POST,在请求 body 中有凭据。在这种情况下,Amazon 正确遵循 the Oauth2 RFC
  2. 访问令牌由 Amazon 在 JSON 中针对意图请求提供,并且 not 正确设置为承载。这很烦人。

在我的例子中,我不得不绕过它,首先验证请求是否是一个有效的 alexa 请求,其中包含一个 session 和一个访问令牌,然后设置 HTTP_AUTHORIZATION header 到 Bearer <token>,然后使用现有的请求身份验证逻辑进行身份验证(我将 Django 与 django-oauth-toolkit 一起使用,所以 YMMV 如果您使用其他东西)。

该代码看起来像这样:

    # get the access_token from the POST request
    if access_token is not None:
        request.META["HTTP_AUTHORIZATION"] = "Bearer " + access_token
        if not hasattr(request, 'user') or request.user.is_anonymous():
            user = authenticate(request=request)
            if user:
                request.user = request._cached_user = user

        if request.user.is_authenticated():
            # Do whatever with the logged in user