【问题标题】:Cognito '/oauth2/token' end point not returning 'id_token' for Authorization Code Grant with PKCECognito '/oauth2/token' 端点未返回 'id_token' 用于 PKCE 的授权代码授予
【发布时间】:2021-03-24 20:06:48
【问题描述】:

Cognito '/oauth2/token' 端点没有返回 'id_token' 用于 PKCE 的授权代码授予,即使文档说它将被返回 (Link)。它也应该返回 id_token。这是正常的还是我需要配置更多?如果有帮助,我在下面添加了我打开的 git 问题的内容(Issue 7393)

复制 重现行为的步骤:

  1. 使用托管 UI 支持配置用户池
  2. 转到托管 UI 并完成登录
  3. 用户将被重定向到“redirectSignIn”网址
  4. Hub.listen('auth') 事件触发并显示错误消息“登录失败错误:需要用户名和池信息。”
  5. 检查会话以获取 ID 令牌
  6. 检查代码质询请求以获取令牌(/oauth2/token 请求)
  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;

截图

请求 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"
  }
}

【问题讨论】:

    标签: amazon-cognito aws-amplify


    【解决方案1】:

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

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

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

    【讨论】:

    • 将“openid”添加到有效范围。非常感谢。
    猜你喜欢
    • 2020-11-25
    • 1970-01-01
    • 2018-05-26
    • 1970-01-01
    • 1970-01-01
    • 2020-03-12
    • 2019-12-31
    • 2019-08-02
    • 2021-07-24
    相关资源
    最近更新 更多