【发布时间】:2021-03-24 20:06:48
【问题描述】:
Cognito '/oauth2/token' 端点没有返回 'id_token' 用于 PKCE 的授权代码授予,即使文档说它将被返回 (Link)。它也应该返回 id_token。这是正常的还是我需要配置更多?如果有帮助,我在下面添加了我打开的 git 问题的内容(Issue 7393)
复制 重现行为的步骤:
- 使用托管 UI 支持配置用户池
- 转到托管 UI 并完成登录
- 用户将被重定向到“redirectSignIn”网址
- Hub.listen('auth') 事件触发并显示错误消息“登录失败错误:需要用户名和池信息。”
- 检查会话以获取 ID 令牌
- 检查代码质询请求以获取令牌(/oauth2/token 请求)
- 两者都没有 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;
截图
配置了什么?
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