Cognito“/oauth2/token”端点未返回“id_token”以使用 PKCE 授予授权代码

Soo*_*L V 3 amazon-cognito aws-amplify

Cognito '/oauth2/token' 端点不返回 PKCE 授权代码授予的 'id_token',即使文档说它将返回(链接)。它也应该返回 id_token。这是正常现象还是我需要进行更多配置?如果有帮助的话,我已经在下面添加了我打开的 git Issue 的内容(Issue 7393

重现 重现该行为的步骤:

  1. 使用托管 UI 支持配置用户池
  2. 转到托管 UI 并完成登录
  3. 用户将被重定向到“redirectSignIn”URL
  4. Hub.listen('auth') 事件触发,并显示错误消息“登录失败错误:需要用户名和池信息。”
  5. 检查会话中的 ID 令牌
  6. 检查代码质询请求以获取令牌(/oauth2/token request)
  7. 两者都没有 ID 令牌。/oauth2/token 仅返回 access_token、expires_in、refresh_token 和 token_type

预期行为 它还应该返回 id_token

代码片段

   import React, {useEffect, useState} from 'react';
   import { Amplify, Auth, Hub  } from 'aws-amplify';
   import {AmplifyConfig} from '../../config/amplifyConfig';
   Amplify.configure({
      Auth: AmplifyConfig.auth
   });
   const AuthorizePage = (props: any) => {
   const [user, setUser] = useState(null);
   useEffect(() => {
        Hub.listen('auth', ({ payload: { event, data } }) => {
        switch (event) {
            case 'signIn':
            case 'cognitoHostedUI':
                getUser().then(userData => setUser(userData));
                break;
            case 'signOut':
                setUser(null);
                break;
            case 'signIn_failure':
            case 'cognitoHostedUI_failure':
                console.log('Sign in failure', data);
                break;
        }
        });
    
        getUser().then(userData => setUser(userData));
    }, []);
    
    function getUser() {
        return Auth.currentAuthenticatedUser()
        .then(userData => userData)
        .catch(() => console.log('Not signed in'));
    }

    return (
        <div className="menu-card-filter--items" data-id="aperitif">
            <span>
                Authorizing
            </span>
        </div>
    )
}

export default AuthorizePage;
Run Code Online (Sandbox Code Playgroud)

截图

请求 https://user-images.githubusercontent.com/12485276/101932415-bccab580-3c00-11eb-8cde-222d72f0d956.png

响应 https://user-images.githubusercontent.com/12485276/101932467-d3710c80-3c00-11eb-9d3b-778faee43fa4.png

配置了什么?

  Auth: {
  mandatorySignIn: true,
  region: "******-*",
  userPoolId: "**-******-*_*******",
  userPoolWebClientId: "**********************",
  oauth: {
    domain: "**********************.amazoncognito.com",
    scope: [
      "phone",
      "email",
      "profile",
    ],
    redirectSignIn: "http://localhost:3000/authorize",
    redirectSignOut: "http://localhost:3000/logout",
    responseType: "code"
  }
}
Run Code Online (Sandbox Code Playgroud)

cal*_*llo 5

将“openid”范围添加到身份验证配置中的范围列表中。

openid 范围返回 ID 令牌中客户端可读的所有用户属性。如果客户端未请求 openid 范围,则不会返回 ID 令牌。

https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pools-app-idp-settings.html此处