【发布时间】:2022-01-13 14:59:47
【问题描述】:
遵循 Okta 的身份验证代码流程 they say I need to create a PKCE code,其中包含代码验证者和挑战者。
不清楚如何像他们的示例一样创建值:
{
"code_verifier":"M25iVXpKU3puUjFaYWg3T1NDTDQtcW1ROUY5YXlwalNoc0hhakxifmZHag",
"code_challenge":"qjrzSW9gMiUgpUvqgEPE4_-8swvyCtfOVvg55o5S_es"
}
我知道我可以像这样在身份验证 URL 中发送代码质询:
https://${ourOktaDomain}/oauth2/v1/authorize?idp=${idp}&client_id=${clientId}&response_type=code&response_mode=query&scope=openid%20email&redirect_uri=http%3A%2F%2Flocalhost%3A3000%2Flogin%2Fcallback&state=${randomString}&code_challenge=${codeChallenge}&code_challenge_method=S256
但不清楚我对验证者做了什么。它说:
您的应用会保存 code_verifier 以供以后使用
在哪里保存验证器以及如何创建这些值?
编辑:显示我在 localStorage 中设置 code_verifier 的代码
const Login = () => {
const codeVerifier = useMemo(async () => {
const s256 = await sha256(codeChallenge)
const verifier = btoa(s256);
window.localStorage.setItem(state, verifier);
return verifier;
}, [])
if (!codeVerifier) {
return <div>Loading...</div>;
}
const queryParams = encode({
client_id: CLIENT_ID,
redirect_uri: encodeURI(REDIRECT_URI),
response_type: 'code',
response_mode: 'query',
state,
nonce,
code_challenge: codeChallenge,
code_challenge_method: 'S256',
scope: 'openid email',
idp: OKTA_IDP
});
const socialLoginURI = `${OKTA_AUTH_URI}?${queryParams}`;
return (
<Button
component="a"
href={socialLoginURI}
aria-label="Login Button"
>
Facebook Login
</Button>
);
};
【问题讨论】:
标签: javascript oauth-2.0 oauth auth0 okta